
Linux 网络编程
文章平均质量分 83
chenjin_zhong
工程师
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux 网络编程之UDP
1.介绍UDP协议是无连接的,不可靠传输的协议. 服务器与客户端的交互不需要建立连接,没有流量控制的功能。与TCP一样,它也是传输层协议,通信过程中需要IP地址与端口号。使用UDP进行程序设计包括服务器与客户端,下面介绍一下服务器与客户端的通信流程:服务器流程:(1)建立服务器套接字描socket(2)将地址结构绑定到套接字上 bind(3)数据传输 sendto/recvfr原创 2012-02-14 10:43:24 · 3658 阅读 · 1 评论 -
Linux网络编程之UDP洪水攻击
1.概述UDP攻击向目标主机的UDP端口发送大量的UDP报文,造成目标主机的端口堵塞,达到攻击的目的。建立多线程,利用原始套接字封装UDP与IP的首部,然后发送UDP报文,攻击目标主机.2. UDP攻击实例#include #include #include #include #include #include #include #include #in原创 2012-02-19 10:54:50 · 2220 阅读 · 0 评论 -
Linux网络编程之SYN洪水攻击
1.概述TCP建立连接需要3次握手,从IP层来看,客户端发送SYN请求,服务器对SYN响应,而客户端对服务器的响应再次确认才能建立连接。在服务器响应之后,等待一段时间,才能获得客户端的确认.从服务器接收到客户端的确认之前,服务器的资源一直占用。如果这时客户端不确认,那么这些连接就是半连接。通过建立大量的半连接,使服务器资源不断的减少,达到攻击的目的。或者是发送大量的SYN请求,使服务器不能够及原创 2012-02-19 19:31:43 · 1660 阅读 · 0 评论 -
Linux原始套接字之sniffer部分实现
1.概述 通常在同一个网段的所有网络接口都有访问在物理媒体上传输的所有数据的能力,而每个网络接口都还应该有一个硬件地址,该硬件地址不同于网络中存在的其他网络接口的硬件地址,同时,每个网络至少还要一个广播地址。(代表所有的接口地址),在正常情况下,一个合法的网络接口应该只响应这样的两种数据帧: 1、帧的目标区域具有和本地网络接口相匹配的硬件地址。 2、帧的目标区域具有"广播地址"原创 2012-02-19 12:46:21 · 344 阅读 · 0 评论 -
Linux网络编程之原始套接字-ping协议实现
1.概述PING协议是用来检验本地主机与远程主机是否连接,发送的是ICMP ECHO_REQUEST包。普通的套接字是基于TCP或者是UDP的,无法发送ICMP包,所以必须用原始套接字来实现。PING协议的客户端类型值为8,代码值为0,表示请求。而PING协议的响应端类型值为0,代码值也为0,表示应答. 以太网数据部分的最小值为46字节,而IP首部占20个字节,ICMP的首部占8个字节,所以P原创 2012-02-19 09:49:14 · 2411 阅读 · 0 评论 -
Linux网络编程之IPv6
1.IPv6特点我们已经学习过了流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAWM),其中原始套接字的功能十分强大,能够传送自定义的数据包,侦听网络上的数据,拒绝服务攻击,发送ICMP包等等。但这些协议都是基于IPv4,接下来,我们学习一下IPV6下的套接字编程. 下面介绍一个IPV6协议。相对于IPv4,IPv6有如下一些显著的优势原创 2012-02-19 20:24:05 · 2189 阅读 · 0 评论 -
Linux网络编程之ICMP洪水攻击
1. ICMP洪水攻击原理ICMP洪水攻击基于PING协议,通过发送大量的PING包来攻击目标主机,主要攻击有3类:(1)直接洪水攻击,即通过多线程的方式一次性发送大量的ICMP包,其缺点是容易暴露,对方知道你的IP,可以直接屏蔽(2)伪装IP攻击, 在直接洪水攻击的基础上,将发送方的IP地址用伪装的IP地址来代替(3)反射攻击, 伪装目标主机向一群主机发送ICMP请求包,这样,这原创 2012-02-19 10:22:40 · 2402 阅读 · 1 评论 -
Linux 网络编程之ioctl函数
1.介绍Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现.2.相关结构体与相关函数#include int ioctl(int d,int request,....);参数:d原创 2012-02-18 09:15:49 · 7928 阅读 · 3 评论 -
Linux 网络编程之原始套接字
1. 介绍前面主要介绍了流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),基本上能够满足TCP与UDP的应用。但一些问题,我们仍然无法解决,如:(1)发送一个自定义的IP包(2)发送ICMP包(3)侦听网络上的数据包(4)伪装IP地址(5)实现自定义的协议究其原因,标准的套接字与TCP,UDP层打交道,而原始套接字只与IP层,MAC层打交道。原创 2012-02-18 19:53:33 · 1537 阅读 · 0 评论 -
Linux网络编程之多播
1.概念单播是用于两个主机之间传送数据,广播是一个主机对局域网内的所有主机发送数据。而多播,又称为组播,它是对一组特定的主机通信。将网络上同一类型业务逻辑上分组,只和组内的成员通信,其它主机没有加入组则不能通信。与单播相同的是,组播允许在Internet上通信,而广播只是同一局域网内的主机通信。组播地址是特定的,D类地址用于组播,即244.0.0.0到239.255.255.255. 并划分为原创 2012-02-18 19:15:10 · 3569 阅读 · 2 评论 -
Linux网络编程之广播
1.概念前面介绍的TCP,UDP都是单播方式,即一对一.而广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:(1)确定一个发送广播的接口,如eth0(2)确定广播的地址,通过ioctl函数,请求码设置为SIOCGIFBRDADDR得到广播的地址(3)使用这个广播地址进行广播由于TCP协议是端到端的协议,在通信之前,必须原创 2012-02-18 18:11:10 · 3571 阅读 · 1 评论 -
Linux网络编程之I/O复用循环服务器
1.介绍在前几节,我们介绍了循环服务器,并发服务器. 简单的循环服务器每次只能处理一个请求,即处理的请求是串行的。而并发服务器可以通过创建多个进程或者是线程来并发的处理多个请求。但由于进程或线程的切换会带来一定的开销。而且随着客户端请求的增多,创建的线程或进程的数目也越来越多,开销势必会增加。因此,本文提出了I/O复用的循环服务器。I/O复用的循环服务器创建两个线程,一个是客户端连接处理线程,原创 2012-02-18 14:27:48 · 1450 阅读 · 1 评论 -
Linux网络编程之简单并发服务器
1.概念与前面介绍的循环服务器不同,并发服务器对服务请求并发处理。而循环服务器只能够一个一个的处理客户端的请求,显然效率很低. 并发服务器通过建立多个子进程来实现对请求的并发处理,但是由于不清楚请求客户端的数目,因此很难确定子进程的数目。因此可以动态增加子进程与事先分配的子进程相结合的方法来实现并发服务器。2. 算法流程(1)TCP简单并发服务器: 服务器子进程1:原创 2012-02-18 10:31:35 · 1988 阅读 · 0 评论 -
Linux网络编程之循环服务器
1.介绍Linux网络循环服务器是指逐个处理客户端的连接,处理完一个连接后再处理下一个连接,是一个串行处理的方式,比较适合时间服务器,DHCP服务器.对于TCP服务器来说,主要阻塞在accept函数,等待客户端的连接。而对于UDP服务器来说,主要阻塞在recv函数.2.循环服务器模型TCP循环服务器:算法如下: socket(...);原创 2012-02-18 09:57:47 · 1421 阅读 · 2 评论 -
Linux网络编程之高级并发服务器
1. 介绍在上一节,我们介绍了Linux简单的并发服务器,通过在服务器端建立多个子进程,来接收客户端的请求,实现并发处理,但这种方式明显有缺陷,服务器并不知道客户端请求的数量,所以事先建立的进程数不好确定。所以,这里介绍三种高级并发服务器模式。第一种是服务器端统一accept,接收客户端的到来,然后为每个客户端分配一个进程去处理. 第二种是统一accept接收请求,然后为每个客户端分配一个线程原创 2012-02-18 11:02:29 · 3332 阅读 · 0 评论 -
Linux网络编程之套接字选项设置
1.介绍在Linux网络编程中,有时需要设置地址复用,允许发送广播包,将主机加入某个多播组,设置发送与接收缓冲区的大小,设置发送与接收的超时时间,将套接字绑定到某个接口上,发送TCP探测包查看客户端是否保持连接等,这些都需要对套接字选项进行设置.而对套接字选项进行操作的主要有以下两个函数,setsockopt与getsockopt. 这两个函数不仅能够操作套接字层,而且能够操作IP层与TCP层原创 2012-02-17 20:48:55 · 3621 阅读 · 0 评论 -
Linux网络编程之TCP(下)- I/O数据复用
1.介绍网络数据的发送与接收有多种方式,可以直接直接从套接字读取数据或向套接字写入函数,如read/write. 也可以通过向量发送与接收数据,如readv/writev. 另外还可以通过消息发送与接收数据,如sendmsg/recvmsg. 主要的I/O模型有以下几种:(1)阻塞I/O-通常情况下,当数据没有到来的时候,会阻塞进程一直等待数据,如recv函数,它是最常用的模型.(2)原创 2012-02-13 19:42:11 · 1395 阅读 · 0 评论 -
Linux 网络编程之TCP(上)
1.TCP通信流程TCP网络编程主要是用套接字来实现网络服务器与客户端通信,一个标准的套接字是由协议族,IP地址与端口号组成,它是TCP服务器与客户端通信的基础,TCP的服务器端流程:(1)建立套接字(socket)(2)将地址结构绑定到套接字上(bind)(3)监听本地端口,设置监听队列的长度,服务器将不能同时处理多个请求,将不能处理的请求放入等待队列中(listen)原创 2012-02-13 09:52:24 · 865 阅读 · 0 评论 -
Linux原始套接字之ARP协议实现
1. ARP协议介绍 ARP(AddressResolutionProtocol)地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)[RFC826].ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当原创 2012-02-19 12:41:39 · 3370 阅读 · 0 评论