




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
通信网络实验嗅探器的实现 一、 实验目的掌握基于Libpcap/Winpcap的协议分析器的设计方法二、原理介绍嗅探器程序一般包括内核部分和用户分析部分。1) 内核部分负责从网络中捕获和过滤数据。2) 用户分析部分负责界面、数据转化与处理、格式化、协议分析,如果在内核没有过滤数据包,在这里还要对数据进行过滤。一个较为完整的基于网络监听和过滤的程序一般包括以下步骤:1) 数据包捕获2) 数据包过滤与分解3) 数据分析数据包捕获常用的方法有两种:1) 通过设置硬路由器的监听端口;2) 利用以太网络的广播特性。这种方式必须将网卡设置为混杂(promiscuous)模式。监听程序工作在网络环境的底三层,可以拦截所有经过该机器的网络上传送的数据,然后将这些数据做相应处理,可以实时分析这些数据的内容,进而分析网络当前状态和整体布局。基于windows的数据包捕获方案有以下几种:1) 使用原始套接字(row socket)机制。方法简单,但功能有限,只能捕获较高层的数据包;2) 直接连接调用NDIS库函数,这种方法功能非常强大,但是比较危险,很可能导致系统崩溃和网络瘫痪;基于windows的数据包捕获方案有以下几种:1) 使用或者自行编写中间层驱动程序,这是微软公司推荐使用的一种方法,微软提供的win2000 DDK中也提供了几个这样的驱动程序。在具体的实现方式上可分为用户级和内核级两类。其中内核级主要是TDI捕获过滤驱动程序,NDIS中间层捕获过滤驱动程序,NDIS捕获过滤钩子驱动程序等,它们都是利用网络驱动来实现的;而用户级的包括SPI接口,Windows2000包捕获过滤接口等;2) 使用或自行编写协议驱动程序;3) 使用第三方捕获组件或者库,比如Winpcap。捕获数据包后要进行的工作是对其进行包过滤与分解,就是在海量的数据里面找我们感兴趣的内容。一些基础的过滤规则如下:1) 站过滤:专门筛选出来自一台主机或者服务器的数据;2) 协议过滤:根据不同的协议来筛选数据,例如:选择TCP数据而非UDP数据;3) 服务过滤:根据端口号来选择特定数据包;4) 通用过滤:通过数据包中某一特定位置开始,选择具有某些共同数据特征的数据包;过滤完成后,必须进行数据分析,这一部分就是对已经捕获的数据包进行各种分析,比如:网络流量分析、数据包中信息、分析敏感信息提取分析等,功能取决于系统要达到的目的。WinPcap是Windows平台下一个专业网络数据包捕获开发包,是为Libpcap在Windows平台下实现数据包的捕获而设计的。Libcap(Winpcap是其windows版本)可以提供与平台无关的接口,而且操作简单,它是基于改进的BPF(Berkeley Packet Filter),该软件来自Berkeley的Lawrence National Laboratory研究院。使用Winpcap包过程比较规范。基于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的监听过程,为了过滤出登录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 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+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)+Internetheaderlength(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首部校验和(16bits)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;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*/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_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, nUnable to open the adapter. %s is not supported by WinPcapn);pcap_freealldevs(alldevs);/*释放设备列表*/return -1;/*Checkthelinklayer.WesupportonlyEthernetforsimplicity.*/if (pcap_datalink(adhandle) != DLT_EN10MB)/返回链路层的类型,DLT_EN10MB是以太网fprintf(stderr, nThis program works only on Ethernet networks.n);pcap_freealldevs(alldevs);/*Freethedevicelist*/return -1;if (d-addresses != NULL)/*Retrievethemaskofthefirstaddressoftheinterface获取子网掩码*/netmask = (struct sockaddr_in *)(d-addresses-netmask)-sin_addr.S_un.S_addr;else/*IftheinterfaceiswithoutaddresseswesupposetobeinaCclassnetwork*/netmask = 0xffffff;/compilethefilter编译过滤规则,packet_filter-fcode(内核认识的格式)if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) 0)fprintf(stderr, nUnable to compile the packet filter. Check the syntax.n);/*Freethedevicelist*/pcap_freealldevs(alldevs);return -1;/setthefilter所有的一致的数据包将被复制给应用程序if (pcap_setfilter(adhandle, &fcode)description);/*Atthispoint,wedontneedanymorethedevicelist.Freeit*/pcap_freealldevs(alldevs);pcap_loop(adhandle,30, packet_handler, NULL);/*startthecapture抓取30个包,回调函数packet_handler*/return 0;/*Callbackfunctioninvokedbylibpcapforeveryincomingpacket*/void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data) struct tm ltime;char timestr16;ip_header *ih;/指向ip数据报tcp_header *th;/指向tcp报文u_char *pdata;/指向传输数据u_int ip_len;/IP数据报头部长度u_int tcp_len;/TCP报文头部长度u_short sport, dport;/源端口和目的端口地址u_int data_len;/数据长度u_int i;/*convertthetimestamptoreadableformat*/time_t local_tv_sec;local_tv_sec = header-ts.tv_sec;localtime_s(<ime, &local_tv_sec);strftime(timestr, sizeof timestr, %H:%M:%S, <ime);/*printtimestampandlengthofthepacket*/printf(%s.%.6d len:%d , timestr, header-ts.tv_usec, header-len);/*retirevethepositionoftheipheader*/ih = (ip_header *)(pkt_data + 14);/lengthofethernetheader/*retirevethepositionoftheudpheader*/ip_len = (ih-ver_ihl & 0xf) * 4;/ver_ihl是8bit,位与0xf,高4位清零,后4位是首部长度,单位:4字节th = (tcp_header *)(u_char*)ih + ip_len);/*convertfromnetworkbyteordertohostbyteorder*/sport = ntohs(th-sport);dport = ntohs(th-dport);/*printipaddressesandudpports*/printf(%d.%d.%d.%d.%d - %d.%d.%d.%d.%dn, ih-saddr.byte1, ih-saddr.byte2, ih-saddr.byte3, ih-saddr.byte4,/源ip地址sport,/源地址的端口ih-daddr.byte1, ih-daddr.byte2, ih-daddr.byte3, ih-daddr.byte4,/目的ip地址dport);/目的地址的端口tcp_le
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息技术构建高校学生互动与自我管理平台
- 财务风险的定量与定性评估方法探讨
- 临床护理教育中跨学科协作的现状与前景
- 离婚债务合同(标准版)
- 领用学校电脑申请报告(3篇)
- 领取防汛物资申请报告(3篇)
- 公司司机安全培训会议课件
- zo1安全培训课件
- 特种设备(电梯、叉车、锅炉)事故应急预案
- 临界安全培训课件
- 巡察谈话课件
- 高原蔬菜种植培训课件
- 实名认证管理制度
- 2025年海南省科技创新发展服务中心招聘事业编制人员2人考试模拟试题及答案解析
- 安置帮教普法培训
- 培养基验收课件
- 零配件追溯管理办法
- 行政执法应诉培训课件
- 【2025年】北京京剧院招聘考试笔试试卷【附答案】
- (2025年标准)禁止学生早恋协议书
- 智能会计应用课件
评论
0/150
提交评论