Winpcap的网络嗅探器的设计与实现1(3)
时间:2025-07-04
时间:2025-07-04
Winpcap的网络嗅探器的设计与实现提供大家参考
黄 石 理 工 学 院 学 报 2008年24
含了相应设备的名称和描述
。取得网卡列表后就在屏幕上显示出来,如果网卡没有被发现就显示有关错误,pcap_findalldevs()同其他的libpcap函数一样有一个errbuf参数,当有异常情况发生时,这个参数会被pcap填充为某个特定错误字串。
程序功能示意如下:
#inelude”pcap.h”voidmain(){
Pcap_if_t3alldevs;://用于存储网卡信息Charerrbuf[PCAP_ERRBuF_SIZE];//用于存
是pcap-compile()和pcap_setfilter()来实现的。
//编译过滤规则
if(PcaP_compile(adhandle,&fcode,”ipandtcp”,l,netmask)<0)
{fprintf(stderr,”\nUnabletocompilethePaeket);filter.Checkthesyntax.\n”
pcap_freealldevs(alldevs);//释放设备列表retum-1;}//设置过滤器
if(pcap_setfilter(adhandle,&fcode)<0){{fprintf(stderr,”\nErrorsettingthefilter.\);}n”
储错误信息
if(pcap_findalldevs(&alldevs,errbuf)==-1)//这个API用来获得本机网卡列表
{
fprintf(stderr,”ErrorinPcap_findalldevs:%s\n”,errbuf);
exit(l);}
…
pcap_freealldevs(alldevs);//2alldevs()释放内存资源
4.4 捕获数据包
使用pcap_next_ex()从网络接口中读取一个数据包,该函数第一个参数是接口句柄,后两个参数由函数返回,分别为数据包的相关信息和数据
[5]
包本身。函数返回1表示正常接收一个数据包,返回0表示超时,-1。每捕获数,()函数对数/((res=Pcap_next_ex(adhandle,&header,&Pkt--data))>=0)
{//接收超时继续循环if(res==0)continue;//处理收到的数据包PacketHandler();}
4.2 打开网卡。打开网卡的功能是通过pcap_open_
live()来实现的
[4]
。它的函数原型定义如下:
pcap_t3pcap_open_live(char3device,intsnaplen,intpromisc,intto_ms,char3ebuf)
device:前面制定的监听设备接口;
snaplen:制定pcap捕获的最大数目的网络数
5 协议解析模块的设计与实现
该模块的主要功能就是对捕获的数据包按照数据链路层、网络层、传输层和应用层的层次结构自底向上进行解析,最后将解析结果显示输出。
以解析UDP数据包为例,首先设置UDP过滤,用这种方法确保packet_handler()只接收到基于IPV4的UDP数据。同时,定义两个数据结构来描述IP和UDP的头部信息,packet_handler()用这两个结构来定位头部的各种字段。开始捕获之前,首先要用pcap_datalink()来检查MAC层,所以程序只能够工作在Ethernetnetworks上,再次确保MAC头为14bytes。MAC头之后是IP头,可以从中提取出了目的地址。IP之后是UDP,在确定
UDP的位置时有点复杂,因为IP的长度以版本的
据包;
promisc:此参数大于0,即指定device接口工
作在混杂模式(promiscousMode)。
在正常情况下网卡只接受去往它的包而去往其他主机的数据包则被忽略,相反当网卡处于混杂模式时它将接收所有的流经它的数据包,这就意味着在共享介质的情况下可以捕获到其它主机的数据包。大部分的包捕获程序都将混杂模式设为默认。
4.3 数据包的过滤设定
通过设置数据流过滤规则(filter)来实现。数据包过滤处理是嗅探技术中的难点和重点,Win2
pcap提供了最强大的数据流过滤引擎。它采用了
一种高效的方法来捕获网络数据流的某些数据且常常和系统的捕获机制相集成。过滤数据的函数
不同而不同,所以用头长字段来定位UDP,一旦确
下一篇:学校校车安全管理联席会议制度