使用WinPCap编写Sniffer程序.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用WinPcap编写Sniffer程序 内容介绍 嗅探器原理 Winpcap介绍 Winpcap安装 Winpcap应用程序结构 Sniffer(嗅探器)设计原理 通常的套接字程序只能响应与自己硬件地址相匹配的或是以广播形 式发出的数据帧,对于其他形式的数据帧,比如已到达网络接口但 却不是发给此地址的数据帧,网络接口在验证投递地址并非自身地 址之后将不引起响应,也就是说应用程序无法收取到达的数据包。 网络嗅探器的目的恰恰在于从网卡接收所有经过它的数据包,这些 数据包既可以是发给本机的也可以是发往别处的。通过将网络接口 设置为混杂模式可以使它接收所有经过它的数据包(例如以太网帧 将会到达同一局域网的所有网络接口)。 但是,此时操作系统不再 行底层的细节操作(协议处理,流量均衡等) ,而是将拆封解释处 理接收到的数据帧(frame)的任务交给应用程序完成,这样应用程 序就可以灵活的获取各类信息。 什么是 Winpcap 网络数据包捕获库函数 直接访问网络,免费、公用 工作于驱动层,网络操作高效 为应用程序提供了一组API接口 编程容易,源码级移植方便 WinPcap主要功能 捕获原始数据包 将数据包发送给应用程序之前,按照用户规定的规范过滤数据包 将捕获到的数据包输出到文件中,并可以对这些文件进行再分析 向网络发送原始数据包 搜集网络传输统计数据 哪些应用适合使用 WinPcap 网络和协议分析network and protocol analyzers 网络监控network monitors 流量记录traffic loggers 流量产生traffic generators 用户级网桥和路由器user-level bridges and routers 网络入侵检测network intrusion detection systems (NIDS) 网络扫描network scanners 安全工具security tools WinPcap不能胜任的事情 WinPcap从主机的协议(如TCP/IP)独 立收发数据包。这意味着它不能阻塞、过 滤或者处理同一主机上其他程序产生的数 据包:它仅仅嗅探网线上传输的数据包。 所以它不适合应用于流量均衡、QoS调度 和个人防火墙。 Winpcap的安装 下载安装包和开发包 http://winpcap.polito.it Winpcap的安装包(Winpcap_3_1.exe) 程序员开发包(WpdPack_3_1.zip) 运行Winpcap_3_1.exe 测试安装结果 编程环境设定 1. 以Administrator身份登录Windows(2000/XP),运行 一次Winpcap自带例程,此后可以一般用户身份使用 2. 运行Visual C++ 6.0, 打开WpdPack_3_1\WpdPack\Examples-pcap\下的 任一项目(本例用basic_dump目录下 basic_dump.dsw) 3. 在“工程-设置- Link-对象/库模块” 中加入 wsock32.lib ws2_32.lib wpcap.lib 在“工具-选择-目录”的include files和library files设置中引入winpcap开发包中的Include和Lib目录 4. 编译,运行 WinPcap的典型应用 获得设备列表 (一) 一个基本的WinPcap应用程序所需的第一步 就是获得合适的网络适配器。 Libpcap提供 pcap_findalldevs() 函数完成 这个功能。这个函数返回一个相连的pcap_if结 构的列表,列表的每一项包含关于适配器的复杂 的信息。特别的,name和description域数据包 含设备的名称和可读的描述。 ??? pcap_if_t *alldevs,*d; int i=0; ??? char errbuf[PCAP_ERRBUF_SIZE]; ??? if (pcap_findalldevs(alldevs, errbuf) == -1) ??? { ??????? fprintf(stderr,Error in pcap_findalldevs: %s\n, errbuf); ??????? exit(1); ??? } ??? for(d=alldevs;d;d=d-next) { /* Print the list */ ??? pr

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档