




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【win pcap 驱动简介】winpcap(windowspacket capture) 是 windows 平台下一个免费,公共的网络访问系统。开发 winpcap这个项目的目 的在于为 win32应用程序提供访问网络底层的能力。它提供了以下 的各项功能:1捕获原始数 据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;2在数据包发 往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;3在网络上发 送原始的数据包;4收集网络 通信过程中的统计信息。winpcap的主要功能在于独立于主机协议(如 TCP-IP)而发送和接收原始数据包。 也就是说,winpcap不能阻塞,过
2、滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上 传送的数据包。因此,它不能用于 QoS调度程序或个人防火墙。目前,winpcap开发的主要对象是windows NT /2000/XP,这主要是因为在使用 winpcap 的用户中只有一小部分是仅使用 windows 95/98/Me,并且M$也已经放弃了对 win9x的开发。 因此本文相关 的程序 T-ARP也是面向 NT/2000/XP 用户的。其实 winpcap中的面向 9x 系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说 9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。有个软件叫sniffe
3、r pro.可以作网管软件用,有很多功能,可监视网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问IP以及它们之 间的数据流通情况,可以抓包,可对过滤 器进行设置,以便只 抓取想要的包,比如POP3包,smtp包,ftp包等,并可从中找到邮箱用户名和密码,还有ftp用户名和密码.它还可以在使 用交换机的网络上监听,不过要在交换机上装它的一个软件.还有一个 简单的监听软件叫Passwordsniffer,可截获邮箱用户名和密码,还有ftp用户名和密码,它只能用在用 HUB网络上著名软件tcpdump 及ids snort都是基于libpcap编写的,此外Nmap扫描器也是基于libpc
4、ap来捕获目标主机返回的数据包的。winpcap提供给用户两 个不同级别的编程接口:一个 基于libpcap的wpcap.dll,另 一个是较底层的 packet.dll 。对于一般的要与 unix平台上libpcap兼容的开发来说,使用 wpcap.dll是当然的选择。【Win pcap的内部结构】邛加onIwpcape側 e writWinpcap的各个组成部分Winpcap是针对Win32平台的抓包和网络分析的一个架构。它包括一个核心态的包过滤器,一个底层的动态链接库(packet.dll )和一个高层的不依赖于系统的库(wpcap.dll )。为什么使用“ architecture而不
5、是“ library呢?因为抓包是一个要求与网络适配器(网卡)和操作系统交互的底层机制,而且与网络的实施也有密切关系,所以仅用“library ?不能充分表达Winpcap的作用。下图表明了Winpcap的各个组成部分:首先,抓包系统必须绕过操作系统的协议栈来访问在网络上传输的原始数据包(rawpacket ),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(systemdependent )的,在 Winpcap的解决方案里它被认为是一个设备驱动,称作 NPF ( Netgroup Packet Filter )。Winpcap 开发小组针对 Windows
6、95 , Windows98 , WindowsME , Windows NT 4, Windows2000 和 WindowsXP 提供 了不 同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和 injection ),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例 女口,仅仅捕获特 殊主机产生的ftp通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)。其次,抓包系统必须有用户级的程序接口,通过这些接口,用户程序可以利用内核驱动提供的高级特性。Winpcap提供了
7、两个不同的库:packet.dll和wpcap.dll。前者提供了一个底层API,伴随着一个 独立于 Microsoft操作系统的编程接口,这些API可以直接用来访问驱动的函数;后者导出了一组更强大的与libpcap 一致的高层抓包函数库(capture primitives )。这些函数使得数据包的捕获以一种与网络硬件和操作系统无关的方式进行。NPF驱动网络数据 包过滤器(Netgroup Packet Filter , NPF )是 Winpcap 的核心部分,它 是Winpcap完成困难工作的组 件。它处理网络上传输的数据包,并且对用户级提供可捕获(capture )、发送(inject
8、ion )和分析 性能(analysis capabilities )。NPF和NDISNDIS ( Network Driver In terfaceSpecificatio n )是一个定义网络适配器(或者说成是管理网络 适配器的驱动程序)与协议驱动(例如TCP/IP的实现)之间通信的规范。NDIS最主要的目的是作为一个允许协议驱动发送和接收网络( LAN或 WAN )上的数据包而不必关心特定的适配器或特定的Win32操作系统的封装。NDIS支持三种类型的网络驱动:(1 )网络接口卡或 NIC 驱动(Networkin terfacecard or NIC drivers )。NIC驱动直
9、接管理着网络接口卡(NIC)。NIC驱动接下边与硬件连接,从上边表现为一个接口,该接口允许高层发送数据包到网络上,处 理中断,重置 NIC,停止NIC,查询和设置驱动的运行 特征。NIC驱动可以是小端口( miniport )或完全的 NIC驱动(full NIC d river )。Miniport驱动仅仅实现了管理 NIC的必要操作,包括在 NIC上发送和接收数据。对于所有最底层的NIC驱动的操作由 NDIS提供,例如同步(synchronization)。小端口(miniport )不直接调用操作系统函数,它们对于操作系统的接口是NDIS。小端口仅仅是向上传递数据包给NDIS并且NDIS
10、确保这些数据包被传递给正确的协议。完全NIC驱动(Full NIC driver )完成硬件细节的操作和所有由NDIS完成的同步和查询操作。例如,完全 NIC驱动维持接收到的数据的绑定信息。(2) 中间层驱动 (In termediate drivers )中间层驱 动位于高层驱动 动看起来像是小端口;对于小 动可以位于另一个中间层驱动动)和小端口层驱动看起来(In termediate之间。对于高层驱动,中间层驱像协议驱动。一个中间层协议驱这种分层可能对系统性能带来负面影响。开发中间层驱动的一个关键原因是(例如协议驱 端口,中间 之上,尽管 在现存的遗legacy protocol driv
11、er )和小端口之间形成媒体的转化。例如,中间层驱协议。中间层驱动不能与用户模式的应用程序通信,但留协议驱动(动可以将 LAN协议转换成 ATM可以与其他的NDIS驱动通信。(3)传输驱动或协议驱动 现了网络协议 栈,例如IPX/SPX 在协议驱动的(Tran sport 或 TCP/IP, 上面,它为应用层客户程序服务drivers or protocol drivers在一个或多个网络接口卡上提供;在它的下面,它与一个或多个协议驱动实它的服务。NIC驱动或中间层 NDIS驱动连接。4iNIC CrhoiimiNPF在NDIS栈中的位置NPF是一个协议驱动。从性能方面MAC层并且有权使用原始
12、通信( raw来看,这不是最好的选择,但traffic )。下图表现了是它合理地独立于Meding1 WlJi -AA伴随着NPF驱动细节的 WinpcapNPF在的结构NDIS栈中的位置:Win pcap抓包是NPF最重要的操作 。在抓包的时候 ,驱动使用一个网络接口 ,并将这些数据包完整无缺地投递给用户级应用程序。依赖于两个主要组件:一个数据包过滤器,它决定着是否接收进来的数据拷贝给监听程序。数据包过滤器1NPF结构基础下图表现了伴随着NPF驱动细节的的结构。监视着数据包抓包过程包并把数据包是一个有布尔输出的函数。如果函数值是true,抓包驱动拷贝数据包给应用程序;如果是滤器更复杂一些,因
13、为它不仅决定数据包是否 数。被NPF驱动采用的过滤系统来源于BSDNPF数据包过 保存的字节false,数据包将被丢弃。 应该被保存,而且还得决定要Packet Filter ( BPF ),一个虚拟处理器可以执行伪汇 编书写的用户级过滤程序。应用程序采用用户定义的过滤器并使用wpcap.dll将它们编译进BPF程序。然后,应用程序使用BIOCSETF IOCTL写入核心态的过滤器。这样,对于每一个到来的数据包该程序都将被执行,而满足条件的数据包将被接收。与传统解决方案不同,NPF不解释(interpret )过滤器,而是执行( execute )它。由于性能的原因,在使用过滤器 前,NPF提
14、供一个 JIT编译器将它转化成本地的80x86函数。当一个数据包被捕获,NPF调用这个本地函数而不是调用过滤器解释器,这使得处理过程相当快。一个循环 缓冲区,用来保存数据包并且避免丢失。一个保存在 缓冲区 中的数据包有一个头,它包 含了一些主要的信息,例如时间戳和数据包 的大小,但它不是协议头。此外,以队列插 入的方式来保存数据包可以提高数据的存储效率。可以以组的 方式将数据包从NPF缓冲区拷贝到应用程序。这样就提高了性能,因为它降低了读的次数。如果一个数据包到来 的时候缓冲区已经满了,那么该数据包将被丢弃,故发生了丢包。【Win pcap程序实例】获得网卡 接口。在普通的 SOCKET编程中
15、,对双网卡 编程是不行的。当主机为双网 卡时,本程序 可分别获得两张网卡各自的描述结构及地址,然后可以对它们分别进行操作。返回的 alldevs队列首部为逻辑网卡,一般不对它进行什么操作。(一)获得网卡接口# i nclude "pcap.h"void mai n()pcap_if_t *alldevs;/*struct pcap_if_tpcap_if_t*n ext;char *name;char *description;pcap_addr *addresses;Unt falgs;*/pcap_if_t *d;int i=0;char errbufPCAP_ERRB
16、UF_SIZE;/* Retrieve the device list */if (pcap_findalldevs(&alldevs, errbuf) = -1)/ 返 回网卡列表, alldevs 指向表头fprintf(stderr,"Errorin pcap_findalldevs:%sn", errbuf);exit(1);/* Print the list */for(d=alldevs;d;d=d->n ext)printf("%d.%s", +i, d->name);if (d->description)prin
17、 tf("(%s)n", d->descriptio n);else printf(” if(i=0) prin tf("nNo return;/* We don't(Nodescripti onavailable)n");in terfacesfound!Make sureWinPcap is installed.n");n eedany morethe devicelist. Free it */pcap_freealldevs(alldevs);(二 )抓包本程序俘获 局域网内UDP报文。# i nclude "p
18、cap.h"/* 4 bytes IP address */typedefstructip_addressu_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;ip_address;/* IPv4header*/typedefstructip_headeru_charver_ihl;/ Version (4 bits) +Internetheaderlength(4 bits)u_chartos; /Type of serviceu_shorttle n;/ Total lengthu_shortidentification;/ Identi
19、ficationu_shortflags_fo; / Flags (3 bits) +Fragme ntoffset(13 bits)u_charttl; /Time to liveu_charproto;/ Protocolu_short crc; / Header checksum ip_addresssaddr; / Source addressip_addressdaddr; / Destination addressu_int op_pad; / Option + Padding ip_header;/* UDP header*/typedefstructudp_headeru_sh
20、ortsport;/Source portu_shortdport;/Desti nati onportu_short len; / Datagramlengthu_short crc; / Checksumudp_header;/* prototype of the packethandler */void packet_handler(u_char*param, const struct pcap_pkthdr *header, constu_char *pkt_data);main() pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pc
21、ap_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(&alldevs, errbuf) = -1) fprintf(stderr,"Error in pcap_findalldevs: %sn", errbuf); exit(1);/* Print the list */
22、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 -1;printf(&
23、quot;Enter the interface number (1 -%d):",i); scanf("%d", &inum);if(inum < 1 | 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; i< inum-1 ;d=
24、d->next, 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(st
25、derr,"nUnable to open the adapter. %s is not supported b y WinPca pn");/* 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,"nThisprogramworks only on
26、Ethernet networks.n");/* Free the device list */pcap_freealldevs(alldevs);return -1;if(d->addresses!= NULL)/* Retrieve themask of thefirst address of the interface */netmask=(structsockaddr_in*)(d->addresses->netmask)->sin_addr.S_un.S_addr;/* If the interface is withoutelseaddresses
27、 we suppose to be in a C class network */netmask=0xffffff;/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;/
28、set the filterif(pcap_setfilter(adhandle, &fcode)<0) fprintf(stderr,"nError setting the filter.n"); /* Free the device list */pcap_freealldevs(alldevs);return -1; printf("nlistening on %s.n", d->description);/* At this point, we don't need any more the device list.
29、Free it */ pcap_freealldevs(alldevs);/* start the capture */pcap_loop(adhandle,0, packet_handler, NULL);return 0;const/* Callback function invoked by libpcap for every incoming packet */ void packet_handler(u_char *param, const struct pcap_pkthdr *header, u_char *pkt_data)struct tm *ltime; char time
30、str16; 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);/* print timestamp and length of the packet */* retireve the position of the ip header */ih = (ip
31、_header *) (pkt_data +14); /length of ethernet header/* retireve the position of the udp header */ip_len = (ih->ver_ihl & 0xf) * 4;uh = (udp_header *) (u_char*)ih + ip_len);/* convert from network byte 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 -&g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工商银行2025西宁市秋招笔试EPI能力测试题专练及答案
- 2025年3D打印技术的个性化医疗
- 2025年3D打印的医疗植入物研发
- 工商银行2025天津市秋招群面模拟题及高分话术
- 交通银行2025宜春市秋招笔试创新题型专练及答案
- 2025行业品牌建设成功案例
- 交通银行2025阜新市信息科技岗笔试题及答案
- 邮储银行2025白山市半结构化面试15问及话术
- 建设银行2025太原市秋招结构化面试经典题及参考答案
- 中国银行2025巴中市秋招笔试专业知识题专练及答案
- 个人独资企业财务管理制度的简化方案
- 数学游戏(单元复习课件)人教版一年级数学上册
- 新学期幼儿园小班新生家长会课件
- 2024年车险理赔保险知识试题库(附含答案)
- 极简化改造实施规范
- 热固复合聚苯乙烯防火保温板应用技术规程(征求意见稿)
- 线性代数精第一章第一节课件
- 计算机系统原理13015习题答案
- 动物病料的采集运输保存
- 创意设计垃圾桶
- 截肢患者康复护理
评论
0/150
提交评论