




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档可自由编辑打印目目录录一、winpcap 介绍.21、winpcap 驱动各项功能 .22、Winpcap 程序实例.5二、Wireshark(前称 Ethereal).10三、Wireshark 捕获数据帧和 IP 数据包 .10文档可自由编辑打印网网络络协协议议分分析析一一、WINPCAP 介介绍绍winpcap(windows packet capture)是 windows 平台下一个免费,公共的网络访问系统。开发 winpcap 这个项目的目的在于为 win32 应用程序提供访问网络底层的能力。下载网址:。1 1、W WI IN NP PC CA AP P 驱驱动动各各项项功功能
2、能1 捕获原始数据包,包括在共享网络上各主机发送 /接收的以及相互之间交换的数据 winpcap 结构包; 2 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉; 3 在网络上发送原始的数据包; 4 收集网络通信过程中的统计信息。 winpcap 的主要功能在于独立于主机协议(如 TCP-IP)而发送和接收原始数据包。也就是说,winpcap 不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。因此,它不能用于 QoS 调度程序或个人防火墙。目前,winpcap 开发的主要对象是 windows NT/2000/XP,M$也已经放弃了对 win
3、9x 的开发。因此本文相关的程序 T-ARP 也是面向 NT/2000/XP 用户的。winpcap 提供给用户两个不同级别的编程接口:一个基于 libpcap 的 wpcap.dll,另一个是较底层的 packet.dll。对于一般的要与 unix 平台上 libpcap 兼容的开发来说,使用wpcap.dll 是当然的选择。 2 2、WINPCAP 的内部结构 Winpcap 的各个组成部分文档可自由编辑打印Winpcap 是针对 Win32 平台上的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库( packet.dll)和一个高层的不依赖于系统的库(wpcap
4、.dll)。 为什么使用“architecture”而不是“library”呢?因为抓包是一个要求与网络适配器(网卡)和操作系统交互的底层机制,而且与网络的实施也有密切关系,所以仅用 “library”不能充分表达 Winpcap 的作用。 下图表明了 Winpcap 的各个组成部分: 首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包( raw packet),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(system dependent)的,在 Winpcap 的解决方案里它被认为是一个设备驱动,称作 NPF(Netgroup Pack
5、et Filter)。Winpcap 开发小组针对Windows95,Windows98,WindowsME,Windows NT 4,Windows2000 和 WindowsXP 提供了不同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和 injection),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,仅仅捕获特殊主机产生的 ftp 通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。 其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用
6、内核驱动提供的高级特性。Winpcap 提供了两个不同的库:packet.dll 和 wpcap.dll。前者提供了一个底层 API,伴随着一个独立于 Microsoft 操作系统的编程接口,这些 API 可以直接用来访问驱动的函数;后者导出了一组更强大的与 libpcap 一致的高层抓包函数库(capture primitives)。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。 NPF 驱驱动动 网络数据包过滤器(Netgroup Packet Filter,NPF)是 Winpcap 的核心部分,它是Winpcap 完成困难工作的组件。它处理网络上传输的数据包,并且对
7、用户级提供可捕获(capture)、发送(injection)和分析性能(analysis capabilities)。 NPF 和和 NDIS NDIS(Network Driver Interface Specification)是一个定义网络适配器(或者说成是管理网络适配器的驱动程序)与协议驱动(例如 TCP/IP 的实现)之间通信的规范。 NDIS 最主要的目的是作为一个允许协议驱动发送和接收网络( LAN 或 WAN)上的数据包而不必关心特定的适配器或特定的 Win32 操作系统的封装。 NDIS 支持三种类型的网络驱动: (1) 网网络络接接口口卡卡或或 NIC 驱驱动动(Netw
8、ork interface card or NIC drivers)。NIC 驱动直接管理着网络接口卡(NIC)。NIC 驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处理中断,重置 NIC,停止 NIC,查询和设置驱动的运行特征。NIC 驱动可以是小端口(miniport)或完全的 NIC 驱动(full NIC driver)。 Miniport 驱动仅仅实现了管理 NIC 的必要操作,包括在 NIC 上发送和接收数据。对于所有最底层的 NIC 驱动的操作由 NDIS 提供,例如同步(synchronization)。小端口(miniport)不直接调用操作
9、系统函数,它们对于操作系统的接口是 NDIS。 小端口仅仅是向上传递数据包给 NDIS 并且 NDIS 确保这些数据包被传递给正确的协议。 完全 NIC 驱动(Full NIC driver)完成硬件细节的操作和所有由 NDIS 完成的同步和查询操作。例如,完全 NIC 驱动维持接收到的数据的绑定信息。 (2) 中中间间层层驱驱动动(Intermediate drivers)中间层驱动位于高层驱动(例如协议驱动)和小端口之间。对于高层驱动,中间层驱动看起来像是小端口;对于小端口,中间层驱动看起来像协议驱动。一个中间层协议驱动可以位于另一个中间层驱动之上,尽管这种分层文档可自由编辑打印可能对系统
10、性能带来负面影响。开发中间层驱动的一个关键原因是在现存的遗留协议驱动(legacy protocol driver)和小端口之间形成媒体的转化。例如,中间层驱动可以将 LAN协议转换成 ATM 协议。中间层驱动不能与用户模式的应用程序通信,但可以与其他的NDIS 驱动通信。 (3) 传传输输驱驱动动或或协协议议驱驱动动(Transport drivers or protocol drivers)协议驱动实现了网络协议栈,例如 IPX/SPX 或 TCP/IP,在一个或多个网络接口卡上提供它的服务。在协议驱动的上面,它为应用层客户程序服务;在它的下面,它与一个或多个 NIC 驱动或中间层NDIS
11、 驱动连接。 NPF 在 NDIS 栈中的位置NPF 是一个协议驱动。从性能方面来看,这不是最好的选择,但是它合理地独立于MAC 层并且有权使用原始通信( raw traffic)。 下图表现了 NPF 在 NDIS 栈中的位置: 伴随着 NPF 驱动细节的 Winpcap 的结构NPF 结结构构基基础础 下图表现了伴随着 NPF 驱动细节的 Winpcap 的结构。 抓抓包包 抓包是 NPF 最重要的操作。在抓包的时候,驱动使用一个网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。 抓包过程依赖于两个主要组件: 一个数据包过滤器,它决定着是否接收进来的数据包并把数据包 拷贝
12、给监听程序。数据包过滤器是一个有布尔输出的函数。如果 函数值是 true,抓包驱动拷贝数据包给应用程序;如果是 false,数据包将被丢弃。NPF 数据包过滤器更复杂一些,因为它不仅决定数据包是否应该被保存,而且还得决定要保存的字节数。被 NPF 驱动采用的过滤系统来源于 BSD Packet Filter(BPF),一个虚拟处理器可以执行伪汇编书写的用户级过滤程序。应用程序采用用户定义的过滤器并使用 wpcap.dll 将它们编译进 BPF 程序。然后,应用程序使用 BIOCSETF IOCTL 写入核心态的过滤器。这样,对于每一个到来的数据包该程序都将被执行,而满足条件的数据包将被接收。与
13、传统解决方案不同, NPF 不解释(interpret)过滤器,而是执行(execute)它。由于性能的原因,在使用过滤器前, NPF 提供一个 JIT 编译器将它转化成本地的 80 x86 函数。当一个数据包被捕获, NPF 调用这个本地函数而不是调用过滤器解释器,这使得处理过程相当快。 文档可自由编辑打印一个循环缓冲区,用来保存数据包并且避免丢失。一个保存在 缓冲区中的数据包有一个头,它包含了一些主要的信息,例如 时间戳和数据包的大小,但它不是协议头。此外,以队列插入的方式来保存数据包可以提高数据的存储效率。可以以组的方式将数据包从NPF 缓冲区拷贝到应用程序。这样就提高了性能,因为它降低
14、了读的次数。如果一个数据包到来的时候缓冲区已经满了,那么该数据包将被丢弃,因此就发生了 丢包。 2 2、W WI IN NP PC CA AP P 程程序序实实例例获得网卡接口。在普通的 SOCKET 编程中,对双网卡编程是不行的。当主机为双网卡时,本程序可分别获得两张网卡各自的描述结构及地址,然后可以对它们分别进行操作。返回的 alldevs 队列首部为逻辑网卡,一般不对它进行什么操作。 (一一)获获得得网网卡卡接接口口 i nclude pcap.h void main() pcap_if_t *alldevs; /*struct pcap_if_t pcap_if_t *next; ch
15、ar *name; char *description; pcap_addr *addresses; U_int falgs; */ pcap_if_t *d; int i=0; char errbufPCAP_ERRBUF_SIZE; /* Retrieve the device list */ if (pcap_findalldevs(&alldevs, errbuf) = -1)/返回网卡列表,alldevs 指向表头 fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf); exit(1); /* Print the lis
16、t */ for(d=alldevs;d;d=d-next) printf(%d. %s, +i, d-name); if (d-description) printf( (%s)n, d-description); else printf( (No description available)n); if(i=0) printf(nNo interfaces found! Make sure WinPcap is installed.n); return; /* We dont need any more the device list. Free it */ pcap_freealldev
17、s(alldevs); - 文档可自由编辑打印(二二)抓抓包包 本程序俘获局域网内 UDP 报文。 i nclude pcap.h /* 4 bytes IP address */ typedef struct ip_address u_char byte1; u_char byte2; u_char byte3; u_char byte4; ip_address; /* IPv4 header */ typedef struct ip_header u_char ver_ihl; / Version (4 bits) + Internet header length (4 bits) u_c
18、har tos; / Type of service u_short tlen; / Total length u_short identification; / Identification u_short flags_fo; / Flags (3 bits) + Fragment offset (13 bits) u_char ttl; / Time to live u_char proto; / Protocol u_short crc; / Header checksum ip_address saddr; / Source address ip_address daddr; / De
19、stination address u_int op_pad; / Option + Padding ip_header; /* UDP header*/ typedef struct udp_header u_short sport; / Source port u_short dport; / Destination port u_short len; / Datagram length u_short crc; / Checksum udp_header; /* prototype of the packet handler */ void packet_handler(u_char *
20、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; /* Retrieve the device list */ if (pcap_findalldevs(&
21、amp;alldevs, errbuf) = -1) fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf); 文档可自由编辑打印exit(1); /* Print the list */ for(d=alldevs; d; d=d-next) printf(%d. %s, +i, d-name); if (d-description) printf( (%s)n, d-description); else printf( (No description available)n); if(i=0) printf(nNo interfaces
22、 found! Make sure WinPcap is installed.n); return -1; printf(Enter the interface number (1-%d):,i); scanf(%d, &inum); if(inum i) printf(nInterface number out of range.n); /* Free the device list */ pcap_freealldevs(alldevs); return -1; /* Jump to the selected adapter */ for(d=alldevs, i=0; inext
23、, i+); /* Open the adapter */ if ( (adhandle= pcap_open_live(d-name, / name of the device 65536, / portion of the packet to capture. / 65536 grants that the whole packet will be captured on all the MACs. 1, / promiscuous mode 1000, / read timeout errbuf / error buffer ) ) = NULL) fprintf(stderr,nUna
24、ble to open the adapter. %s is not supported by WinPcapn); /* Free the device list */ pcap_freealldevs(alldevs); return -1; /* Check the link layer. We support only Ethernet for simplicity. */ if(pcap_datalink(adhandle) != DLT_EN10MB) fprintf(stderr,nThis program works only on Ethernet networks.n);
25、/* Free the device list */ pcap_freealldevs(alldevs); return -1; 文档可自由编辑打印if(d-addresses != NULL) /* Retrieve the mask of the first address of the interface */ netmask=(struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr; else /* If the interface is without addresses we suppose to be in
26、a C class network */ netmask=0 xffffff; /compile the filter if(pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) 0 ) fprintf(stderr,nUnable to compile the packet filter. Check the syntax.n); /* Free the device list */ pcap_freealldevs(alldevs); return -1; /set the filter if(pcap_setfilte
27、r(adhandle, &fcode)description); /* At this point, we dont need any more the device list. Free it */ pcap_freealldevs(alldevs); /* start the capture */ pcap_loop(adhandle, 0, packet_handler, NULL); return 0; /* Callback function invoked by libpcap for every incoming packet */ void packet_handler
28、(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) struct tm *ltime; char timestr16; ip_header *ih; udp_header *uh; u_int ip_len; /* convert the timestamp to readable format */ ltime=localtime(&header-ts.tv_sec); strftime( timestr, sizeof timestr, %H:%M:%S, ltime); /* prin
29、t timestamp and length of the packet */ /* retireve the position of the ip header */ ih = (ip_header *) (pkt_data + 14); /length of ethernet header /* retireve the position of the udp header */ ip_len = (ih-ver_ihl & 0 xf) * 4; uh = (udp_header *) (u_char*)ih + ip_len); /* convert from network b
30、yte order to host byte order */ printf(%s.%.6d len:%d , timestr, header-ts.tv_usec, header-len); /* print ip addresses */ 文档可自由编辑打印printf(%d.%d.%d.%d - %d.%d.%d.%dn, ih-saddr.byte1, ih-saddr.byte2, ih-saddr.byte3, ih-saddr.byte4, ih-daddr.byte1, ih-daddr.byte2, ih-daddr.byte3, ih-daddr.byte4 ); - (三
31、三)发发包包 要在命令行下运行,给与参数:网卡描述符。或者添加代码 findalldevs(),那样应很方便。 i nclude i nclude i nclude void usage(); void main(int argc, char *argv) pcap_t *fp; char errorPCAP_ERRBUF_SIZE; u_char packet100; int i; /* Check the validity of the command line */ if (argc != 2) printf(usage: %s inerface, argv0); return; /*
32、Open the output adapter */ if(fp = pcap_open_live(argv1, 100, 1, 1000, error) ) = NULL) fprintf(stderr,nError opening adapter: %sn, error); return; /* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ packet0=1; packet1=1; packet2=1; packet3=1; packet4=1; packet5=1; /* set mac sourc
33、e to 2:2:2:2:2:2 */ packet6=2; packet7=2; packet8=2; packet9=2; packet10=2; 文档可自由编辑打印packet11=2; /* Fill the rest of the packet */ for(i=12;icmd-ping 文档可自由编辑打印(2)用 IE 打开网页: (3)登录一个 FTP 服务器文档可自由编辑打印5.至至此此,可可以以点点 Stop 按按钮钮停停止止 Wireshark 的的抓抓捕捕工工作作。得得到到如如下下图图所所示示的的结结束束,刚刚才才被被捕捕获获的的数数据据帧帧全全部部在在这这了了。文档可自
34、由编辑打印6.以以下下来来分分析析数数据据帧帧和和数数据据包包捕 获的数据含义如下:第一列是捕获数据的编号;第二列是捕获数据的相对时间,从开始捕获算为 0.000 秒;第三列是源地址,第四列是目的地址;第五列是协议信息;第六列是数据包的信息。为了避免因操作失误导致数据丢失,我们可以先将捕获的数据保存起来(选择 file-save 命令)。文档可自由编辑打印7.以以太太网网的的帧帧格格式式:(1)ARP 协协议议封封装装在在以以太太网网中中的的格格式式:分分析析 ARP 封封装装在在以以太太网网数数据据帧帧中中在下图中 Filter 后面的编辑框中输入:arp(注意是小写),然后回车或者点击“Apply”按钮, 现在只有 ARP 协议了。其他的协议数据包都被过滤掉了。如下图:文档可自由编辑打印选中一个数据帧,然后从整体上整体上 WiresharkWireshark 的窗口,主要被分成三部分:上面部分是所的窗口,主要被分成三部分:上面部分是所有数据帧的列表;中间部分是数据帧的描述信息有数据帧的列表;中间部分是数据帧的描述信息;下面部分是帧里面的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业数字化战略与风险试题及答案
- 教研员工作心得感想(5篇)
- 行政管理未来发展的方向试题及答案
- 白酒销售2025上半年工作总结(3篇)-1
- 行政管理核心课程试题及解答
- 软件项目评审与反思试题及答案
- 网络管理的最佳沟通技巧试题及答案
- 容器技术简介试题及答案
- 保障性租赁住房项目前景分析与实施方案
- 工业互联网平台网络切片技术在智能安防领域的应用案例报告
- (二模)保定市2025年高三第二次模拟考试地理试卷(含答案解析)
- 足浴店员工涉黄合同协议
- 2023年1月浙江高考英语试题(含答案解析)
- 应用文写作-介绍智能校园图书馆的英文发言稿+讲义-2025届吉林省长春市高三下学期质量监测(三)英语试题
- 2025-2030中国叶黄素行业市场发展现状及竞争格局与投资发展研究报告
- 非全日制劳动合同协议
- 企业交通安全宣传教学课件
- 2025-2030再生胶产业规划专项研究报告
- 2025年人教版小学六年级下册趣味数学竞赛试卷(附参考答案)
- 2025年碳汇 实施方案
- 创新工程实践智慧树知到期末考试答案章节答案2024年北京大学等跨校共建
评论
0/150
提交评论