LAN中Sniffer的设计与实现

上传人:小**** 文档编号:57192729 上传时间:2022-02-23 格式:DOC 页数:4 大小:342.50KB
返回 下载 相关 举报
LAN中Sniffer的设计与实现_第1页
第1页 / 共4页
LAN中Sniffer的设计与实现_第2页
第2页 / 共4页
LAN中Sniffer的设计与实现_第3页
第3页 / 共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 米雁辉 网络安全与黑客 航空工业出版社 20022 侯红 利用Sniffer软件管理和维护局域网 网络技术 2002.53 唐正军 刘代志 网络嗅探器Sniffer软件源代码浅析3采用Labpcap库的通用设计 计算机工程 2002.2 4 http:/www.sans.org/infosecFAQ/sniffers.htm.
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 商业管理 > 营销创新


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!