版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、以太网数据包结构以太网包(帧)格式在以太网的发展过程中,出现了很多的帧格式,目前,应用最多的是以太网 II格式,也就是以太网版本2,是由DEC、Intel和Xerox在1982年制定的,现 在几乎是以太网的标准,它是由RFC894所定义的,其帧格式如下图所示:目的MAC地址(6字节)源MAC地址(6字节)协议类型(2字节)以太网帧数据负载(46字节到1500字节)协议类型说明:0 x0800: IP协议数据包 0 x0806: ARP协议数据包 0 x0835: RARP协议数据包0 x8863: PPP Over Ethernet Discovery Stage0 x8864: PPP Ov
2、er Ethernet Session StageIP协议数据包结构如下页表:IP是一个无连接的协议,主要就是负责在主机间寻址并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递,另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。4位版 本4位包头 长度8位服务类型即TOS16位总长度16位标识号即ID号3 位Flag-13位片偏移8位生存时间8位协议类型M位包头校验和015 163132位源IP地址20 个 字节关位目的IP地址|网篷样隆LJ.in版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般 的值为 0100(IPv4),IPv6
3、的值(0110)IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述 IP包头的长度,因为在IP包头中有变长的可选部分。IP包头最小长度为20字 节,由于变长的可选部分最大长度可能会变成24字节。服务类型(Type of Service):长度8比特。这个子段可以拆分成两个部 分:优先级(Precedence)和服务条款(TOS)。TOS (前三位)目前不太使用。而Precedence则用于QOS应用(TOS字段的详细描述RFC 1340 1349)8个BIT的含义是:000前三位不用0表示最小时延,如Telnet服务使用该位0表示吞吐量,如FTP服务使用该位0表示
4、可靠性,如SNMP服务使用该位0表示最小代价0不用IP包总长(Total Length):长度16比特。IP包最大长度65535字节。标识符(Identifier):长度16比特。该字段和Flags和Fragment Offest 字段联合使用,对大的上层数据包进行分段(fragment)操作。标记(Flags):长度3比特。该字段第一位不使用。第二位是DF位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将M
5、F位设为1。分段序号(Fragment Offset):长度13比特。该字段对包含分段的上层数 据包的IP包赋予序号。由于IP包在网络上传送的时候不一定能按顺序到达,这 个字段保证了目标路由器在接受到IP包之后能够还原分段的上层数据包。到某 个包含分段的上层数据包的IP包在传送是丢失,则整个一系列包含分段的上层 数据包的IP包都会被要求重传。生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某 个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将 IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以 防止由于故障而导致IP包在网络中不
6、停被转发。协议(Protocol):长度8比特。标识了上层所使用的协议。如果是ICMP 协议,此处的协议代码应为1。如果TCP协议,则此处的协议代码应为6。如果 是UDP协议,则此处的协议代码应为17。头部校验(Header Checksum):长度16位,由于IP包头是变长的,所以 提供一个头部校验来保证IP包头中信息的正确性。起源和目标地址 (Source and Destination Addresses)IP选项(options)主要用于控制和测试两大目的。作为选项 用户可以使用也可以不使用IP选项 但作为IP协议的组成部分 所有实现IP协议的设备能处理IP选项。在使用选项的过程中,有
7、可能造成数据包头部不是32b的整数倍,那么则 需要填充域来凑齐。IP数据报选项有选项玛、长度、和选项数据3部分组成,其中,选项玛用于确定该选项的具体内容,选项数据部分长度有选项字段决 定。源路由。所谓源路由是指IP数据包穿越互联网所经过的路径是 有源主机指定的,他 区别于有主机或路由器的互联层软件自行选择路由后得出的路径。源路由选项是非常有用的一个选项,可用于测试某个特定网络的吞吐量, 也可以是数据包绕开出错网络。源路由选项可以分为两类,一类是 严格源路由选项,一类是松散源路由选 项。记录路由所谓记录路由是指记录下IP数据报从源主机到目的主机所经过的路径上的 各个路由器的IP地址,记录路由功能
8、可以通过IP数据报的记录路由选项完成。利用记录路由选项,可以判断IP数据报传输过程中的所经过的路径,通常 还可以测试互联网中路由配置是否正确。时间戳所谓时间戳(timer stamp)就是记录下IP数据报经过的每一个路由器时的当地时间,记录时间戳可以使用IP数据报的时间戳选项。时间戳中的时间采用格林尼治时间。时间戳选项提供了 IP数据报传输中的时域参数,用于分析网路吞吐率,拥塞情况,负载情况等ICMP报文结构如下:internet控制消息协议ICMP是用于报告错误并代表IP对消息进行控制。类型(8位)代码(8位)校验和(16位)标示符(16位)序号(16位)当前时间(32位)8bits类型和8
9、bits代码字段:一起决定了 ICMP报文的类型.如下表:类屋代码捎述Qi目的不可达:Q网络不可这1主机不可ii2的成:如!让i端口不可达4需蛰进行分片但没曾了不分片比特5源站痛失暇6目的网蜡不认识7目的主机不讯诅3源主担祯隔罟|作.1殳不甲|9目的网兆被强制禁止10目的主机被强制禁止II由于眼身类粤ms.网皤不可达12由干服务美土丁口主机不可达11由于过滤.渥信被曲制禁止14生腿枳15优先枳中止生效4Q源端祯美竹|基本流掉制510定向0对网错由定百I对主帆而定曲2对1!2类E和网咯Hi.定而3对服务类必和主机而定茵80请求园界二斌求90路由券通告1C0垮由器请求11起时:0伟赣期何生存时0.
10、为C fTraceroute1在散据报那装期m生存时E为。12悬裁问鹿0坏的IP首条包括各种是错|L130时请求140时间戳应答套0信息靖求IWT用拓01言息应答t作庶不用)17D境址掩挡请求1S0地址掩此应答16bits校验和字段:包括数据在内的整个ICMP数据包的校验和,其计算方 法和IP头部校验和的计算方法是一样的。16bits标识符字段:用于标识本ICMP进程16bits序列号字段:用于判断回射应答数据报。时间戳:时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测 试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接 收方收到请求后填充接收时间戳
11、后以Type=14的报文格式返回,发送方计算这个 时间差。一些系统不响应这种报文。TCP报文结构如下表:(摘自 HYPERLINK /viewtopic.php?f=3&t=21 /viewtopic.php?f=3&t=21)传输控制协议(TCP)向上与用户应用程序进程接口,向下与网络层协议IP 接口。用户应用程序采用首先调用TCP(或UDP),然后将应用程序数据递交给TCP这一方式,在IP网络上传送数据。TCP将这些数据打包分段并调用IP模块向目的主机传送每个数据段。接收方的TCP将段中的数据放入接收缓冲器,然后将段重装为应用程序数据,再将这些数据发送到目的的应用程序进程。尽管T C P和
12、U D P都使用相同的网络层(I P),T C P却向应用层提 供与U D P完全不同的服务。T C P提供一种面向连接的、可靠的字节流服务。00 01 D2 03 04 05 06 07 0W9 1011 12 13 14 话】6 17 1& 19 202 22 23 24 25 26 27 28 29 30 31 B源端口号16位目标端n号16位顺序目32位序列编号数据偏移成,丝一;牛* 32位确认编号头滁度保留6位mm Cj K 11 : N N窗口大小16位校验和16位紧急指针16位可选项8的倍数位数据源端口号(16位),标识主机上发起传送的应用程序;目的端口(16位) 标识主机上传送
13、要到达的应用程序。源端和目的端的端口号,用于寻找发端和收 端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确 定一个T C P连接。一个IP地址和一个端口号有时也称为一个插口( s o c k e t),插口对(s o c k e t p a i r)(包含客户I P地址、客户端口号、服 务器IP地址和服务器端口号的四元组)可唯一确定互联网络中每个T C P连接的双方。IP+TCP端口唯一确定一个TCP连接。TCP协议通过使用端口来标识源端和目标端的应用进程。端口号可以使用 0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应 用程序分配端口号。在服务
14、器端,每种服务在众所周知的端口(Well-KnowPort)为用户提供服务。顺序号字段:占32比特。用来标识从TCP源端向TCP目标端发送的数据 字节流,它表示在这个报文段中的第一个数据字节。确认号字段:占32比特。只有ACK标志为1时,确认号字段才有效。它 包含目标端所期望收到源端的下一个数据字节。头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字 段的TCP头部长度为20字节;最多可以有60字节的TCP头部。预留:由跟在数据偏移字段后的6位构成,预留位通常为0.标志位字段(U、A、P、R、S、F):占6比特。各比特的含义如下:URG :紧急指针(urgent pointer)
15、有效。ACK :确认序号有效。PSH :立即发送(默认要等到发送缓冲区存满再发送数据)RST :重建连接。 SYN :发起一个连接。FIN:释放一个连接。窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数, 这个值是本机期望一次接收的字节数。 TCP校验和字段:占16比特。对整个TCP报文段,即TCP头部和TCP数 据进行校验和计算,并由目标端进行验证。紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表 示紧急数据最后一个字节的序号。选项字段:占32比特。可能包括窗口扩大因子、时间戳等选项。TCP三次握手:创建TCP连接1、A 端 SYN=1,ACK=0Sequenc
16、eNumber二XXX2、B端SYN=1,ACK=1 SequenceNumber=YYY Acknowledgement=XXX+13、A端SYN=0,ACK=1 SequenceNumber=XXX+1 Acknowledgement=YYY+1这个TCP负载中已经可以包含业务数据了。FIN=1,ACK=1FIN=1,ACK=1TCP链接撤销:1、A端SequenceNumber=XXXAcknowledgement=YYY2、B端SequenceNumber=YYYAcknowledgement=XXX+13、A端Acknowledgement=YYY+1FIN=0,ACK=1Seque
17、nceNumber=XXX+1定义TCP报头typedef struct _tcphdrbyte source_port2; /发送端端口号,16 位byte dest_port2; /接收端端口号,16 位byte sequence_no4; /32位,标示消息端的数据位于全体数据块的某一字节的数字byte ack_no4; /32位,确认号,标示接收端对于发送端接收到数据块数值byte offset_reser_con2;/数据偏移4位,预留6位,控制位6为byte window2; /窗口 16 位byte checksum2; /校验码,16 位byte urgen_pointer2;
18、 /16 位,紧急数据指针byte options3; /选祥和填充,32 位TCP_HEADER;本文来自CSDN博客: HYPERLINK /byxdaz/archive/2007/08/01/1720966.aspx /byxdaz/archive/2007/08/01/1720966.aspxTCP/IP协议简单分析首先TCP和IP是两种不同的协议,它们来七层网络模型中分别在不同的层 次,IP协议是网络层的协议,TCP是更高一层的传输层的协议,TCP是建立在IP 协议之上的,所以一般把TCP和IP连在一起说TCP/IP协议。Windows系统的TCP协议栈的数据包默认是1460字节大小
19、,如果一次传输 的数据大于这个长度,会把分割成几个长度都不大于1460字节的TCP数据包, 每个数据包都会被赋予一个sequnce number (相当于每个数据包的顺序号,凭 这个接收端可以知道数据包的前后顺序)之后TCP的数据包再被包裹上一层IP的数据的头形成IP数据包在网上传 输(其实最后还要包一层以太网数据包,网络上最终传输的都是以太网数据包)。IP数据包到了目的地后,接收端首先把IP数据包的包头去掉,取出TCP的 包接收端每收到一个TCP的数据包都需要返回给发送端一个ACK的数据包告诉 发送端已接到此数据包,如果接收端在一定的时间内没有收到某个数据包的ACK 响应,会再次发送这个数据
20、包,这样就保证了数据都能被接收端接收到(因特网 上丢数据包是很正常的事,如果没有数据包重发机制,很难保证发送的数据都能 被接收端完整的收到)。每个TCP数据包也是由包头和实际数据组成,包头包含如下主要内容:l Source port (2 字节)发送端的端口号l Destination port (2 字节)接收端的端口号TCP包头中只包含双方的端口号双方的IP地址在IP包的包头所以在TCP 数据包的包头中没有IP地址。l Sequence number (4 字节)数据的顺序号,表示当前数据包中的数据起始顺序号,比如前一个数据包的 SEQ为十六进制的:df d5 aa 3d,数据包的实际数据
21、长度为16字节,那么下 一个数据包的SEQ就要在前一个数据包的SEQ基础上加上16,为:df d5 aa 4dl Acknowledgement number (4 字节)接收到对方的某个数据包后的回应顺序号。如果接收到了对方主动发送来的 某个数据包,必须要返回对方一个ACK回应数据包,数据包的头部的 Acknowledgement number部分根据对方发送数据的SEQ和实际数据长度,返回 SEQ+实际数据长度,表示已经接收到这个数据包。对方收到这个回应,根据数 值计算后知道这个数据包已经被对方接收。如果接收不到ACK的回应,就意味着 这个数据包已经在网上被丢失,需要重新发送此数据包。l
22、Header length ( 1 字节)表示TCP数据包的包头长度,整个TCP数据包的长度减包头长度就能得到TCP数据包的实际传送的数据长度。l Flags ( 1 字节)标志字节,每一位都是一个标志,以下是几个主要标志:ACK -表示数据包是个ACK回应数据包,表示接收到了对方的某个数据包, 具体哪个包由包头的Acknowledgement number部分指示。PSH -表示这是个有实际数据的包。SYN -表示这是个建立连接的数据包,通讯双方要通讯,总是由客户端先发送SYN数据包到服务端以建立TCP的连接。FIN -表示通讯结束,拆除连接的数据包。下面描述一次TCP传送数据的完整过程 以
23、一个客户端向服务端发送一些数据为例。客户端f IP:Pcirt)服务浦 1 IP:Pcirt)1.1SYN客户端初始SEQ1L 1.2 SYN ACK服务能初始SEQ1.3 ACK11112.1客户端发送服客端数据包-11NW服第端发往客户端ACK11孔W,hJ+ 1客尸端发送服务端的2CK13,1客户端发送FINST1111服曾端ACKFIN1 L :游客户端发送林:1/1Figure 1.一次完整的TCP通讯的过程1、建立连接TCP是面向连接的协议,客户端和服务端要通讯就必须先建立一个连接。首 先通讯双方都有地址,就是IP地址加端口号(IP:Port)标识通讯的每一端,客 户端的IP:Po
24、rt跟服务器IP:Port之间就构成一个socket套接字。所谓建立连 接就是在客户端的IP:Port跟服务器IP:Port之间建立一个通道 初始化一些通 讯的基础设置,以便以后的数据通讯的正常进行。客户端发送SYN总是客户端发起连接 首先客户端发送SYN数据包到服务端以建立TCP连接,SYN数据包只有TCP包头,没有实际数据。Flags标志字节的SYN位置位,表示是SYN数据包。Sequence number由客户端随机生成一个4字节的数据,作为本次连接通讯 客户端数据的起始顺序号,以后客户端发往服务端的数据包的Sequence number 都在此基础上加上每次传送的实际数据长度依次相加递
25、增,这样根据每个数据包 的Sequence number就能判断出数据包的前后顺序,以便接收方根据数据包的顺 序拼接数据包。服务端回应ACK、SYN服务端收到客户端的SYN后,首先要发送一个ACK数据包给客户端表示收到 了这个数据包。数据包的Flags标志字节的ACK置位,表示是ACK回应数据包。Acknowledgement number设置为接收到的数据包的SEQ +数据包实际长 度,因为接收到的SYN的实际数据长度为0,但是TCP协议认为实际长度为0的 主动发送的数据长度为1,SYN是客户端主动发送的数据包,所以服务端把Acknowledgement number设置为接收到的数据包的S
26、EQ + 1。TCP通讯可以是双向的,一旦建立了连接,服务端也可以向客户端发送数据。所以服务端也会向客户端发送一个SYN包,数据包的Flags标志字节的SYN 置位,表示是SYN数据包,同时随机生成一个4字节的数据,作为本次连接通讯 服务端数据的起始顺序号Sequence number o实际中,服务端把这两个数据包合并为一个数据包,SYN和ACK都是置位, Sequence number和Acknowledgement number也同时设置,作为一个数据包发 送回客户端。客户端回应ACK客户端收到服务端的SYN数据包后,需要回应一个ACK数据包,表示接收到 此数据包。同样ACK数据包的Ac
27、knowledgement number设置为接收到的数据包 的SEQ + 1(SYN、ACK数据包的实际数据长度也是0)。2、相互收发数据通讯双方建立了连接后,就可以相互进行数据包的传送。发送数据的一端,把数据包的Flags标准字节的PSH置位,表示是有实际数 据的数据包。Sequence number置为前一次的数据包的Sequence number加上前一次数据 包的长度。如果数据包还兼做ACK包,则把ACK置位,同时设置好Acknowledgement number把数据包发送到对方。接收方收到对方主动发送的数据数据包后,一定要回复ACK数据包,如果同 时有数据发往对方,可以把实际数据
28、包跟ACK数据包合在一起发送。在拆除连接之前,通讯双方可以一直相互发送接收数据,数据的顺序都建立 在各自的Sequence number基础上。图1中,蓝色部分的数据通讯就表示这一阶段。3、拆除连接双方数据交换完毕,需要拆除连接,结束通讯。3.1.客户端发送FIN通讯的一方向另一方发送FIN数据包表示要结束通讯,拆除连接。客户端把数据包的Flags标准字节的FIN置位,表示是通讯结束数据包。3.2.服务端返回ACK,FIN服务端收到客户端的FIN数据包后,先回应一个ACK数据包,然后也发送一 个FIN数据包,还是服务端也结束通讯。客户端回应ACK客户端回应ACK表示接收到服务端的FIN数据,双
29、方通讯结束。UDP报文结构如下表:UDP源端口号(16位)UDP目标端口号(16位UDP长度(16位)UDP校验和(16位)数据区UDP协议不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。但UDP协议拥有TCP协议望尘莫及的速度。主要应用于视频电话会议。ARP协议数据包:ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务。IP数据包常通过以太网发送,以太网设备并不识别32位IP地址,它
30、们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行。ARP和RARP报头结构ARP和RARP使用相同的报头结构,如图1所示。硬件类型协议类型硬件地址长度J协议长度操作类型发送方的硬件地址字节)4源物理地址(4-5字节)4源IP地址(0-1字节)4源IP地址(2-3字节)目标硬件地址ST字节)目标硬件地址字节)目标IP地址(0-3字节
31、)4(图1 ARP/RARP报头结构)?硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;?协议类型字段指明了发送方提供的高层协议类型,IP为0800(16进制);?硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;?操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;?发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;?发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;?发送方IP(0-1字节):源主机硬件地址的前2个字节;?发送方IP(2-3字节):
32、源主机硬件地址的后2个字节;?目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;?目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;?目的(0-3字节):目的主机的IP地址。ARP和RARP的工作原理ARP的工作原理如下:首先,每台主机都会在自己的ARP缓冲区(ARP Cache)中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表 中是否存在该IP地址对应的MAC地址 如果有,就直接将数据包发送到这个MAC 地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对 应的MAC地址。此A
33、RP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自 己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送 端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP 的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址 添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。RARP的工作原理如
34、下:发送主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;如果不存在,RARP服务器对此不做任何的响应;源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。#include pcap.h以太网头结构/目的主机物理地址源主机物理地址以太网帧类型typedef struct et
35、h_headerunsigned char eth_dst6;unsigned char eth_src6;unsigned short eth_type;eth_header;/* 4字节的IP地址*/typedef struct ip_address u_char byte1;u_char byte2;u_char byte3;u_char byte4;ip_address;/版本(4 bits) +首部长度(4 bits)/ 服务类型(Type of service)/ 总长(Total length)/* IPv4 首部 */ typedef struct ip_header u_ch
36、ar ver_ihl; u_char tos;u_short tlen;/ 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)/ 存活时间(Time to live)/ 协议(Protocol)/ 首部校验和(Header checksum)/ 源地址(Source address)/ 目的地址(Destination address)/ 选项与填充(Option + Padding)u_short identification; / 标识(Identification) u_short flags_fo;u_char ttl;u_cha
37、r proto;u_short crc;ip_address saddr;ip_address daddr;u_int op_pad;ip_header;/* UDP 首部*/typedef struct udp_header(u_short sport;/ 源端口 (Source port)u_short dport;/ 目 的端口 (Destination port)u_short len;/ UDP 数据包长度(Datagram length)u_short crc;/ 校验和(Checksum)udp_header;/*回调函数原型*/void packet_handler(u_cha
38、r *param, const struct pcap_pkthdr *header, const u_char *pkt_data);main()pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbufPCAP_ERRBUF_SIZE;u_int netmask;char packet_filter = ip and udp;struct bpf_program fcode;/*获得设备列表*/if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &
39、alldevs, errbuf) = -1) fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf);exit(1);/*打印列表*/for(d=alldevs; d; d=d-next)printf(%d. %s, +i, d-name); if (d-description)printf( (%s)n, d-description);elseprintf( (No description available)n);if(i=0)printf(nNo interfaces found! Make sure WinPcap is insta
40、lled.); return -1;printf(Enter the interface number (1-%d):,i);scanf(%d”, &inum);if(inum i)printf(nInterface number out of range.n);/*释放设备列表*/pcap_freealldevs(alldevs);return -1;/*跳转到已选设备*/for(d=alldevs, i=0; inext, i+);/*打开适配器*/if ( (adhandle= pcap_open(d-name, / 设备名 65536,/要捕捉的数据包的部分/ 65535保证能捕获到不
41、同数据链路层上的每 个数据包的全部内容PCAP_OPENFLAG_PROMISCUOUS,/ 混杂模式1000,/读取超时时间NULL, /远程机器验证 errbuf /错误缓冲池 )=NULL)fprintf(stderr,nUnable to open the adapter. %s is not supported by WinPcapn);/*释放设备列表*/pcap_freealldevs(alldevs);return -1;/*检查数据链路层,为了简单,我们只考虑以太网*/if(pcap_datalink(adhandle) != DLT_EN10MB)fprintf(stder
42、r,nThis program works only on Ethernet networks.n);/*释放设备列表*/pcap_freealldevs(alldevs);return -1;if(d-addresses != NULL)/*获得接口第一个地址的掩码*/netmask=(struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr; else/*如果接口没有地址,那么我们假设一个C类的掩码*/netmask=0 xffffff;编译过滤器if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) 0 )fprintf(stderr,nUnable to compile the packet filte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新大型半导体设备安全员考试题库及答案
- 2025安管人员考试试题和答案
- 2025年医务人员职业暴露与标准预防培训试题及答案
- 2025锅炉工考试试题及答案
- 2026年绩效主管的考试题库及答案
- 2026年程序员编程考试题含答案
- 2026年智能硬件产品设计与开发面试题及答案
- 湖南省怀化市2024-2025学年高二上学期1月期末质量检测语文试卷(含答案)
- 2025年幼儿园教师师德师风考试试题(含完整答案)
- 2026年程序员培训师考试题含答案
- 物业验房培训课件
- 2026年内蒙古建筑职业技术学院单招职业技能考试题库及答案详解1套
- 传媒外包协议书
- 2025-2026学年人教版三年级数学上册第六单元分数的初步认识素养达标卷(含答案)
- 小水杯回家课件
- 2025中央民族大学非事业编制合同制职工招聘1人(第五批)模拟笔试试题及答案解析
- 电信条例法律培训大纲
- 浙江省温州市2024-2025学年九年级上学期语文期末试卷(含答案)
- 2025年及未来5年市场数据中国旧楼加装电梯市场供需现状及投资战略数据分析研究报告
- GB/T 46671-2025植物提取物生产工艺技术规范
- 2026-2031中国森林防火市场前景研究与发展趋势研究报告
评论
0/150
提交评论