使用WinPcap编写Sniffer程序.ppt

上传人:鲁** 文档编号:569281564 上传时间:2024-07-28 格式:PPT 页数:41 大小:420.50KB
返回 下载 相关 举报
使用WinPcap编写Sniffer程序.ppt_第1页
第1页 / 共41页
使用WinPcap编写Sniffer程序.ppt_第2页
第2页 / 共41页
使用WinPcap编写Sniffer程序.ppt_第3页
第3页 / 共41页
使用WinPcap编写Sniffer程序.ppt_第4页
第4页 / 共41页
使用WinPcap编写Sniffer程序.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《使用WinPcap编写Sniffer程序.ppt》由会员分享,可在线阅读,更多相关《使用WinPcap编写Sniffer程序.ppt(41页珍藏版)》请在金锄头文库上搜索。

1、使用WinPcap编写Sniffer程序内容介绍嗅探器原理嗅探器原理Winpcap介绍介绍Winpcap安装安装Winpcap应用程序结构应用程序结构Sniffer(嗅(嗅探器)设计原理探器)设计原理 通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形式发出的数据帧,对于其他形式的数据帧,比如已到达网络接口但却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地址之后将不引起响应,也就是说应用程序无法收取到达的数据包。网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些数据包既可以是发给本机的也可以是发往别处的。通过将网络接口设置为混杂模式可以使它接收所有经过它的数据包(例如

2、以太网帧将会到达同一局域网的所有网络接口)。 但是,此时操作系统不再行底层的细节操作(协议处理,流量均衡等) ,而是将拆封解释处理接收到的数据帧(frame)的任务交给应用程序完成,这样应用程序就可以灵活的获取各类信息。什么是什么是Winpcap 网络数据包捕获库函数网络数据包捕获库函数直接访问网络,免费、公用直接访问网络,免费、公用工作于驱动层,网络操作高效工作于驱动层,网络操作高效为应用程序提供了一组为应用程序提供了一组APIAPI接口接口编程容易,编程容易,源码级移植方便源码级移植方便Libpcap(UNIX)库Winpcap(Windows)库Winpcap介绍WinPcap主要功能主

3、要功能捕获原始数据包捕获原始数据包将将数数据据包包发发送送给给应应用用程程序序之之前前,按按照用户规定的规范过滤数据包照用户规定的规范过滤数据包将将捕捕获获到到的的数数据据包包输输出出到到文文件件中中,并可以对这些文件进行再分析并可以对这些文件进行再分析向网络发送原始数据包向网络发送原始数据包搜集网络传输统计数据搜集网络传输统计数据Winpcap介绍哪些应用适合使用哪些应用适合使用WinPcap 网络和协议分析networkandprotocolanalyzers网络监控networkmonitors流量记录trafficloggers流量产生trafficgenerators用户级网桥和路由

4、器user-levelbridgesandrouters网络入侵检测networkintrusiondetectionsystems(NIDS)网络扫描networkscanners安全工具security toolsWinpcap介绍WinPcap不能胜任的事情不能胜任的事情 WinPcap从主机的协议(从主机的协议(如如TCP/IP)独)独立收发数据包。这意味着它不能阻塞、过立收发数据包。这意味着它不能阻塞、过滤或者处理同一主机上其他程序产生的数滤或者处理同一主机上其他程序产生的数据包:它仅仅嗅探网线上传输的数据包。据包:它仅仅嗅探网线上传输的数据包。所以它不适合应用于流量均衡、所以它不适

5、合应用于流量均衡、QoS调度调度和个人防火墙。和个人防火墙。 Winpcap介绍Winpcap的安装的安装 下载安装包和开发包下载安装包和开发包http:/winpcap.polito.itWinpcap的安装包(Winpcap_3_1.exe) 程序员开发包(WpdPack_3_1.zip) 运行运行Winpcap_3_1.exe 测试安装结果测试安装结果 Winpcap安装编程环境设定1. 以以Administrator身份登录身份登录Windows(2000/XP),运行运行 一次一次Winpcap自带例程,此后可以一般用户身份使用自带例程,此后可以一般用户身份使用2. 运行运行Visu

6、alC+6.0, 打开打开WpdPack_3_1WpdPackExamples-pcap下的下的 任一项目(本例用任一项目(本例用basic_dump目录下目录下 basic_dump.dsw)3.在在“工程工程-设置设置 Link对象对象/库模块库模块” 中加入中加入 wsock32.libws2_32.libwpcap.lib 在在“工工具具-选选择择-目目录录”的的include files和和libraryfiles设置中设置中引入引入winpcap开发包中的开发包中的Include和和Lib目录目录4.编译,运行编译,运行Winpcap安装Winpcap安装例程运行结果:例程运行结果

7、:WinPcap的典型应用的典型应用获得已安装设获得已安装设备的高级信息备的高级信息过滤数据包过滤数据包获得设备列表获得设备列表打开一个适配器打开一个适配器 回调机制回调机制 直接方式直接方式解析数据包解析数据包获得网络流量统计数字获得网络流量统计数字打开离线数据包打开离线数据包文件文件获得设备列表 (一) 一个基本的WinPcap应用程序所需的第一步就是获得合适的网络适配器。Libpcap提供pcap_findalldevs()函数完成这个功能。这个函数返回一个相连的pcap_if结构的列表,列表的每一项包含关于适配器的复杂的信息。特别的,name和description域数据包含设备的名称

8、和可读的描述。 pcap_if_t*alldevs,*d;inti=0;charerrbufPCAP_ERRBUF_SIZE;if(pcap_findalldevs(&alldevs,errbuf)=-1)fprintf(stderr,Errorinpcap_findalldevs:%sn,errbuf);exit(1);for(d=alldevs;d;d=d-next)/*Printthelist*/printf(%d.%s,+i,d-name);if(d-description)printf(%s)n,d-description);elseprintf(Nodescriptionavail

9、able)n);if(i=0)printf(nNointerfacesfound!MakesureWinPcapisinstalled.n);return;pcap_freealldevs(alldevs);获得设备列表 (二)每个pcap_findalldevs()返回的pcap_if结构也包含了一个pcap_addr结构的列表:v该接口的地址列表该接口的地址列表v网络掩码的列表网络掩码的列表(每个网络掩码对应地址列表中的一项)v广播地址的列表广播地址的列表(每个广播地址对应地址列表中的一项)v目标地址的列表目标地址的列表(每个目标地址对应地址列表中的一项)通过返回的结构,我们可以得到探测到

10、的网卡设备的更详尽信息。typedefstructpcap_ifpcap_if_t structpcap_ifstructpcap_if*next;char*name;char*description;structpcap_addr*addresses;bpf_u_int32flags;/*PCAP_IF_interfaceflags*/;structpcap_addrstructpcap_addr*next;structsockaddr*addr;structsockaddr*netmask;structsockaddr*broadaddr;structsockaddr*dstaddr;打开

11、一个适配器开始捕获数据包pcap_t*pcap_open_live(constchar*device,intsnaplen,intpromisc,intto_ms,char*ebuf) pcap_t*adhandle=pcap_open_live(d-name,65536,1,1000,errbuf); 设备标识(字符串)抓包长度混杂模式超时时间捕获数据包(回调机制)intpcap_loop(pcap_t*p,intcnt,pcap_handlercallback,u_char*user)例如:pcap_loop(adhandle,0,packet_handler,NULL); typedef

12、void(*pcap_handler)(u_char*user,conststructpcap_pkthdr*pkt_header,constu_char*pkt_data)捕获数据包(直接方式)intpcap_next_ex(pcap_t*p,structpcap_pkthdr*pkt_header,constu_char*pkt_data)该函数从接口或者脱机读取一个数据包。用于接收下一个可用的数据包,而不使用libpcap提供的传统的回调机制。pcap_next_ex用下一个数据包的指向数据包头和数据的指针填充pkt_header和pkt_data参数。 pcap_next_ex() 目

13、前只在Win32下可用,因为它不是属libpcap原始的API。这意味着含有这个函数的代码将不能被移植到Unix上。 过滤数据包intpcap_compile(pcap_t*p,structbpf_program*fp,char*str,/过滤表达式intoptimize,bpf_u_int32netmask)/掩码intpcap_setfilter(pcap_t*p,structbpf_program*fp)pcap_compile()编译一个包过滤器。将一个高级的、布尔形式表示的字符串转换成低级的、二进制过滤语句,以便被包驱动使用。pcap_setfilter() 在核心驱动中将过滤器和捕

14、获过程结合在一起。从这一时刻起,所有网络的数据包都要经过过滤,通过过滤的数据包将被传入应用程序。 过滤设置举例charpacket_filter=ipandudp;structbpf_programfcode;/*获取接口地址的掩码,如果没有掩码,认为该接口属于一个获取接口地址的掩码,如果没有掩码,认为该接口属于一个C类网络类网络*/if(d-addresses!=NULL)netmask=(structsockaddr_in*)(d-addresses-netmask)-sin_addr.S_un.S_addr;elsenetmask=0xffffff;if(pcap_compile(adh

15、andle,&fcode,packet_filter,1,netmask)0)fprintf(stderr,nUnabletocompilethefilter.Checkthesyntax.n);pcap_freealldevs(alldevs);return-1;if(pcap_setfilter(adhandle,&fcode)=0)/处理代码处理代码/主程序中主程序中pcap_loop(fp,0,dispatcher_handler,NULL);/主程序中主程序中voiddispatcher_handler(u_char*temp1,conststructpcap_pkthdr*head

16、er,constu_char*pkt_data)/处理代码处理代码第一步:打开离线数据文件第一步:打开离线数据文件第二步:读取离线数据第二步:读取离线数据 (一)使用回调函数 (二)不使用回调函数if(fp=pcap_open_offline(argv1,errbuf)=NULL)fprintf(stderr,nErroropeningdumpfilen);return-1;发送数据包pcap_sendpacket发送单个数据包发送单个数据包 发送队列(查看winpcap手册)pcap_sendpacket发送单个数据发送单个数据包包 打开适配器后,调用pcap_sendpacket()函数来

17、发送一个手写的数据包。 pcap_sendpacket()用一个包含要发送的数据的缓冲区、该缓冲区的长度和发送它的适配器作为参数。注意该缓冲区是不经任何处理向外发出的,这意味着,如果想发些有用的东西的话,应用程序必须产生正确的协议头。 u_charpacket100;if(fp=pcap_open_live(argv1,100,1,1000,error)=NULL)fprintf(stderr,nErroropeningadapter:%sn,error);return;/*Supposingtobeonethernet,setmacdestinationto1:1:1:1:1:1*/pack

18、et05=1;/*setmacsourceto2:2:2:2:2:2*/packet611=2;/*Filltherestofthepacket*/for(i=12;its.tv_sec-old_ts-tv_sec)*1000000old_ts-tv_usec+header-ts.tv_usec;注意:此处dispatch_handler每次回调时填入的 第二个和第三个参数,前者还是和驱动 有关的抓包头部,而后者指向封装了接 收包数目和接收字节数目的数据区/计算每秒获取的二进制位数Bps.QuadPart=(*(LONGLONG*)(pkt_data+8)*8*1000000)/(delay)

19、;/*计算每秒获取的包数*/Pps.QuadPart=(*(LONGLONG*)(pkt_data)*1000000)/(delay);/打印时间戳ltime=localtime(&header-ts.tv_sec);strftime(timestr,sizeoftimestr,%H:%M:%S,ltime);printf(%s,timestr);/打印采样值printf(BPS=%I64u,Bps.QuadPart);printf(PPS=%I64un,Pps.QuadPart);/保存当前的时间戳old_ts-tv_sec=header-ts.tv_sec;old_ts-tv_usec=header-ts.tv_usec;例:应用程序模块及工作流程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号