LAN中Sniffer的设计与实现.doc_第1页
LAN中Sniffer的设计与实现.doc_第2页
LAN中Sniffer的设计与实现.doc_第3页
LAN中Sniffer的设计与实现.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LAN中Sniffer的设计与实现靳风荣 郑雪峰 黄丽娟(北京科技大学信息学院100083)摘要:本文阐述了Sniffer基本原理,并给出了在Linux平台下Sniffer的设计过程与实现方法。关键词:Sniffer、LAN、TCP、IP、ICMP、UDP随着INTERNET的发展,网络安全系统的要求也与日俱增,LAN数据监听系统的研究,对于更好的维护计算机网络及解决网络安全问题有着重要的意义。它可以用来帮助诊断网络中的路由设备,查看网上数据报的传送情况,有利于网络管理员的管理与维护。在防范网络攻击方面,通过数据截取及其分析输出结果可以捕获到透过防火墙而进入网络的非法数据,成功的监视和记录黑客的入侵过程,保障网络的安全。1 Sniffer(嗅探器)基本原理以太网是最流行的组网方法,对于每一个网络接口(网卡)来说,同一个网段的所有网络卡都有访问在物理媒体上传输的所有数据的能力,而每个网络卡都有一个硬件地址,即MAC地址,该硬件地址是唯一的,同网络中存在的其他网络卡的硬件地址不会相同。网卡工作模式有4种,分别是:广播(Broadcast)模式、多播(Multicast)模式、直接模式(Unicast)和混杂模式(Promiscuous)。在混杂模式下的网卡能够接收一切通过它的数据,而不管该数据目的地址是否是它。如果通过程序将网卡的工作模式设置为“混杂模式”,那么网卡将接受所有流经它的数据帧,这实际上就是Sniffer工作的基本原理:让网卡接收一切他所能接收的数据。Sniffer就是一种能将本地网卡状态设成混杂(promiscuous)状态的软件,当网卡处于这种混杂方式时,该网卡具备广播地址,它对所有遇到的每一个数据帧都产生一个硬件中断以便提醒操作系统处理流经该物理媒体上的每一个报文包。可见,Sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据,并且通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。在实际应用中,存在许多非以太网接入的情况,如通过DDN专线或者光纤接入等。在这些情况下,必须在路由器/网关中设置监听端口,将流经路由器/网关的所有信息流量通过一个特定的监听端口输出,从而实现信息的监听。2局域网中Sniffer设计2.1基于Libpcap库函数的解决方案 Libpcap 实质上是一个系统独立的API函数接口,用于用户层次的数据包截获工作。libpcap库功能强大,它可以支持实现从获取本机网络接口地址,设置网络接口工作模式到读取数据包,设置过滤规则(即设定要分析的协议和端口号)。总之,有libpcap的支持,一切都可以简单化。2.2 基于pcap的系统流程pcap的数据监听系统程序的总体布局设计如图2所示。1. 首先要确定从哪个网络接口截取数据,在Linux系统中一般使用“ether0”接口。可以用一个字符串来定义这个设备,或者采用pcap提供的接口名来工作。2. 初始化pcap。根据上面给出的网络接口设备进行嗅探,那么用pcap打开一个文件句柄,并为其命名,作为嗅探会话句柄。3. 创建嗅探规则(即数据包分析的规则)。Pcap的过滤器功能非常强大,它直接使用BPF。因为本方案只要对IP、ICMP、UDP、TCP数据包和部分的端口进行分析,所以要创建一个规则集合,编译并且使用。4. 实际的窥探(即获取所需的数据包)。根据规则进入截取数据包程序的循环体。每收到一个数据包,就调用另外一个程序做相应的处理。当做完上面的处理后,关闭会话,结束。图2基于pcap的系统流程3具体实现3.1数据包的数据结构需要定义数据包的数据结构,在定义该结构时分别要用到以太帧头、IP数据报头以及TCP报文头结构,结构定义如下:下面为以太帧头的格式;#include struct etherhdr unsigned char h_destETH_ALEN; /* destination eth addr */unsigned char h_sourceETH_ALEN; /* source ether addr */unsigned short h_proto; /* packet type ID field */;根据TCP、IP协议格式和具体实现要求,容易定义出TCP和IP数据报头的格式,限于篇幅,这里不再赘述。ICMP协议头结构和UDP协议头结构用etherpkt来定义如下:struct etherpktstruct etherhdr eth;struct iphdr ip;unionstruct tcphdr tcp;struct icmphdr icmp;struct udphdr udp;proto;char buff8129;ep;3.2 主体程序框架下面是用pcap库来实现网络数据截取和分析的主体程序框架:#include #include #include #include #include #include #include #include #include #include #include static pcap_t *pd;main(int argc,char argv)registe int cnt;char ebufPCAP_ERRBUF_SIZE; /*存储错误信息的字符串*/register char *device ,*cmdbuf; bpf_u_int32 netp ,maskp; /*执行嗅探的设备的IP地址和网络掩码*/int snaplen; /*截获数据包的最大长度*/struct bpf_program fcode;pcap_handler printer;u_char *pcap_userdata;cnt = -1;device = NULL;/*获取网络设备*/device=pcap_lookupdev(ebuf);if (device = NULL)error(%s, ebuf);/*获取本地的IP地址和网络掩码*/if(pcap_lookupnet(device,&netp,&maskp,ebuf)0)netp = 0;maskp = 0;error(%s, ebuf);/*打开设备接口,将其置为混杂模式*/pd = pcap_open_live(device, snaplen, 1, 1000, ebuf);if (pd = NULL)error(%s, ebuf);/*编译过滤规则*/if (pcap_compile(pd, &fcode, cmdbuf, 0, maskp) 0) /*cmdbuf中存放过滤规则*/error(%s, pcap_geterr(pd);if (pcap_setfilter(pd, &fcode) 0)error(%s, pcap_geterr(pd); /*按照规则截获数据包*/if (pcap_loop(pd, cnt, printer, pcap_userdata) 0) /*printer函数为callback函数,对截获的数据包进行输出处理等;*/error(“%s”, pcap_geterr(pd);exit(1); /*关闭会话结束*/pcap_close(pd);exit(0);4 结论Sniffer即可以由硬件实现(又叫网络协议分析仪)也可以又软件实现。大多数嗅探器至少能够分析下面的协议:标准以太网、TCP/IP、IPX、ICMP协议等,但专用的嗅探器价格非常昂贵。而软件Sniffer具有物美价廉、易于学习使用、易于交流的特点。在中小规模的LAN中,Sniffer的研究和开发对网络安全和管理具有十分重要的意义。参考文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论