通信网络实验——嗅探器的实现.docx

上传人:大米 文档编号:559677766 上传时间:2023-11-16 格式:DOCX 页数:9 大小:160.68KB
返回 下载 相关 举报
通信网络实验——嗅探器的实现.docx_第1页
第1页 / 共9页
通信网络实验——嗅探器的实现.docx_第2页
第2页 / 共9页
通信网络实验——嗅探器的实现.docx_第3页
第3页 / 共9页
通信网络实验——嗅探器的实现.docx_第4页
第4页 / 共9页
通信网络实验——嗅探器的实现.docx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《通信网络实验——嗅探器的实现.docx》由会员分享,可在线阅读,更多相关《通信网络实验——嗅探器的实现.docx(9页珍藏版)》请在金锄头文库上搜索。

1、通信网络实验嗅探器的实现 一、 实验目的掌握基于Libpcap/Winpcap的协议分析器的设计方法二、原理介绍嗅探器程序一般包括内核部分和用户分析部分。1) 内核部分负责从网络中捕获和过滤数据。2) 用户分析部分负责界面、数据转化与处理、格式化、协议分析,如果在内核没有过滤数据包,在这里还要对数据进行过滤。一个较为完整的基于网络监听和过滤的程序一般包括以下步骤:1) 数据包捕获2) 数据包过滤与分解3) 数据分析数据包捕获常用的方法有两种:1) 通过设置硬路由器的监听端口;2) 利用以太网络的广播特性。这种方式必须将网卡设置为混杂(promiscuous)模式。监听程序工作在网络环境的底三层

2、,可以拦截所有经过该机器的网络上传送的数据,然后将这些数据做相应处理,可以实时分析这些数据的内容,进而分析网络当前状态和整体布局。基于windows的数据包捕获方案有以下几种:1) 使用原始套接字(row socket)机制。方法简单,但功能有限,只能捕获较高层的数据包;2) 直接连接调用NDIS库函数,这种方法功能非常强大,但是比较危险,很可能导致系统崩溃和网络瘫痪;基于windows的数据包捕获方案有以下几种:1) 使用或者自行编写中间层驱动程序,这是微软公司推荐使用的一种方法,微软提供的win2000 DDK中也提供了几个这样的驱动程序。在具体的实现方式上可分为用户级和内核级两类。其中内

3、核级主要是TDI捕获过滤驱动程序,NDIS中间层捕获过滤驱动程序,NDIS捕获过滤钩子驱动程序等,它们都是利用网络驱动来实现的;而用户级的包括SPI接口,Windows2000包捕获过滤接口等;2) 使用或自行编写协议驱动程序;3) 使用第三方捕获组件或者库,比如Winpcap。捕获数据包后要进行的工作是对其进行包过滤与分解,就是在海量的数据里面找我们感兴趣的内容。一些基础的过滤规则如下:1) 站过滤:专门筛选出来自一台主机或者服务器的数据;2) 协议过滤:根据不同的协议来筛选数据,例如:选择TCP数据而非UDP数据;3) 服务过滤:根据端口号来选择特定数据包;4) 通用过滤:通过数据包中某一

4、特定位置开始,选择具有某些共同数据特征的数据包;过滤完成后,必须进行数据分析,这一部分就是对已经捕获的数据包进行各种分析,比如:网络流量分析、数据包中信息、分析敏感信息提取分析等,功能取决于系统要达到的目的。WinPcap是Windows平台下一个专业网络数据包捕获开发包,是为Libpcap在Windows平台下实现数据包的捕获而设计的。Libcap(Winpcap是其windows版本)可以提供与平台无关的接口,而且操作简单,它是基于改进的BPF(Berkeley Packet Filter),该软件来自Berkeley的Lawrence National Laboratory研究院。使用W

5、inpcap包过程比较规范。基于Libcap/Winpcap库的基本使用流程比较规范,一般为:1) 使用pcap_lookupdev获取设备;2) 使用pcap_lookupnet获取网络地址和子网掩码;3) 使用pcap_open_live打开设备;4) 使用pcap_complile编译过滤规则;5) 使用pcap_setfilter设置过滤规则;6) 使用pcap_loop循环捕获数据包,在其中调用相应处理函数;7) 使用pcap_close关闭设备句柄。三、实验环境Windows 8.1,WinPcap4.1,VS2013四、实验思路1、以老师给出的参考代码为基础编写基于Winpcap

6、的监听过程,为了过滤出登录FTP服务器的帐号和密码,将过滤规则设置为“port 21”,即只过滤出端口号为21的传输数据;2、在回调函数中对捕获到的数据包进行分析,打印出每条数据包的时间、源地址和目的地址,并找出关键字“USER”和“PASS”,过滤出FTP服务器的帐号和密码。五、实验步骤参考代码编写基于WinPcap的监听程序。参考给出的代码,实现一个监听程序能够自动过滤FTP的用户名和密码。1、 代码 #include pcap.h#include #define _CRT_SECURE_NO_WARNINGS#pragma comment(lib, ws2_32.lib)/WINSOCK

7、 API链接库文件#pragma comment(lib,wpcap.lib)/Winpcap开发端必需文件#pragma comment(lib,Packet.lib)u_char user20;/存放用户名u_char pass20;/存放密码/*TCP首部*/typedef struct tcp_headeru_short sport;/源程序的端口号u_short dport;/目的程序的端口号u_int seq;/序列号u_int ack_num;/确认号u_char ihl;/Internet头部长度(4bits)+4bits保留u_char frame;/2bits保留+URG+

8、ACK+PSH+RST+SYN+FINu_short wsize;/窗口大小16bitsu_short crc;/Headerchecksum首部校验和(16bits)u_short urg;/urgentframe16bitstcp_header;/*IPv4地址*/typedef struct ip_addressu_char byte1;u_char byte2;u_char byte3;u_char byte4;ip_address;/*IPv4头部*/typedef struct ip_headeru_char ver_ihl;/Version(4bits)+Internethead

9、erlength(4bits)版本+首部长度u_char tos;/Typeofservice区分服务(8bits)u_short tlen;/Totallength总长度(16bits)u_short identification;/Identification标识(16bits)u_short flags_fo;/Flags(3bits)+Fragmentoffset(13bits)标志和片偏移u_char ttl;/Timetolive生存时间(8bits)u_char proto;/Protocol协议(8bits)u_short crc;/Headerchecksum首部校验和(16

10、bits)ip_address saddr;/Sourceaddress(32bits)ip_address daddr;/Destinationaddress(32bits)u_int op_pad;/Option+Paddingip_header;/*prototypeofthepackethandler*/void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);/*主函数*/int main() pcap_if_t *alldevs, *d;int inum;

11、int i = 0;/网络设备个数pcap_t *adhandle;/网卡描述符char errbufPCAP_ERRBUF_SIZE;unsigned int netmask;char packet_filter = port 21;/过滤规则struct bpf_program fcode;/*Retrievethedevicelist获取网络设备列表*/if (pcap_findalldevs(&alldevs, errbuf) = -1)fprintf(stderr, Errorinpcap_findalldevs:%sn, errbuf);exit(1);/*Printthelist

12、*/for (d = alldevs; d; d = d-next)printf(%d. %s, +i, d-name);if (d-description)printf( (%s)n, d-description);elseprintf( (No description available)n);if (i = 0)/没有获取到网络设备时,显示提示printf(nNo interfaces found! Make sure WinPcap is installed.n);return -1;printf(Enter the interface number (1-%d):, i);scanf

13、_s(%d, &inum);if (inumi)printf(nInterfacenumberoutofrange.n);pcap_freealldevs(alldevs);/*Freethedevicelist*/return -1;/*跳转到已选设备*/for (d = alldevs, i = 0; inext, i+);/*打开适配器*/if (adhandle = pcap_open_live(d-name,/设备名65536,/要捕捉的数据包的部分1,/promiscuousmode混杂模式1000,/读取超时时间,单位mserrbuf/errorbuffer) = NULL)fprintf(stderr,

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

最新文档


当前位置:首页 > 生活休闲 > 社会民生

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