网络数据包截获方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2008.1
26网络安全技术与应用网络数据包截获方法
安志强 刘峰 张春
北京交通大学计算机与信息技术学院 北京 100044
摘要:本文在分析libpcap基础上,引入一种新的网络监测方法,它可以动态的监测网络通信量,适用于不同的网络环境中。关键词:网络安全;数据包;截获;动态网络监视接口
0 引言
网络数据包截获机制是网络管理系统的基础组件之一。数据包截获机制是网络性能分析工具和网络安全工具的实现基础。一方面,网络数据截取要能保证捕获到所有网络上的数据包,尤其是检测到被分片的数据包;另一方面,网络截取数据包的效率也是很重要的,它直接影响整个入侵检测系统的运行速度。
1 数据流截获方法
1.1 利用广播截取网络数据流
数据包的截取技术是依赖网卡的,而网卡可以通过广播监听到以太网络上的数据包,这就是数据包截取技术的基础。
要想截获不是给自己数据流,就必须绕开系统正常工作的机制,直接通过设置网卡的的工作模式为混杂模式,使之可以接受目标地址不是自己的MAC地址的数据包,直接访问数据链路层,获取数据。
1.2 各系统截取数据包机制
Linux系统为用户提供一种在理论上是数据链路层的,基于网卡驱动程序的,可以不用操作系统自身协议栈的接口——SockPacket。这种套接字可以从数据链路层上直接截取所有链路层数据包。而Unix系统则是通过libpcap库直接与内核交互,实现网络截取,如libpcap、tcpdump等。
BSD Packet Filter(BPF)机制来截取数据包。BPF可以说是各系统中较好的截获方式。Windows系统也有类似情况,如:Win系列上有*.vxd和网卡.sys来驱动网卡截取数据包。
2 基于libpcap库的通用数据截获技术
libpcap是用户态的数据包截获API函数接口,有独立和可移植性。最初,libpcap是为了强大、健壮tcpdump而编写的。它支持BPF过滤机制。Snort就是依赖于libpcap库进行数据包截取的程序之一。它的优点是可以从任何Unix内核平台上截取数据包,而不考虑什么芯片类型的网卡和驱动程序。
更重要的是,它可以使开发人员编写自己的解码、显示、记录等程序。
3 Snort调用Libpcap
在Snort运行启动时,Snort调用libpcap库。当调用libpcap函数并初始化接口时,进入截取数据的循环模块——pcap循环。
在这个主循环——pcaploop(),当网卡从网络介质上接收数据开始,pcap_loop便对采集来的每个数据包都ProcessPac-ket()函数处理,如果出错或达到指定的处理包数就退出。即pcap_loop()最后根据数据链路类型来选择数据包,然后由ProcessPacket()来进行协议分析,实施信息流的匹配。
4 网络通信量动态监视的设计
网络监视是指捕获穿越IP网的数据包,打开并进行分析。该操作是个被动行为,不对数据包作任何修改,数据包仍会继续在网络上向目的地传输。随着网络链接速度的增快,现有的网络监视体系已不能满足网络管理中对监视的需求,特别是对一些新的网络应用原有的监视工具不能进行监视,或者监视起来系统开销太大,比如要确定点对点的文件共享(FTP)、多媒体会议等动态分配端口的网络应用对网络的使用情况,就不太可能。另外,对于一些安全应用程序,如入侵检测系统,传统的监视应用程序提供的信息往往是不够用的。
为了解决上述问题,传统的做法是获取通信中的全部数据包,这样会使网络管理员去处理海量的数据。这样做还有一个局限性,便是不具备通用性,不能在不同的硬件平台上使用。
故引入一种新的动态网络监视接口,它可根据用户的需要捕获相关数据包,也允许用户去触发自定义的处理例程。
4.1 网络通信量动态监视的详细设计
在动态网络监视接口中,无需详细了解底层硬件的构成,网络流定义为满足给定条件的一组数据包序列。对于数据包的协议分析和审查而言,给定的条件是不受限制的。而原有的网络流定义为在一个给定的时间段内有相同源、目的IP地
作者简介:安志强(1980-),男,北京交通大学计算机学院2005级硕士研究生,研究方向:网络管
理。刘峰(1961-),男,北京交通大学计算机学院副院长、教授,硕士生导师。张春(1966-),女,北
京交通大学计算机学院网管研究中心高级工程师。
2008.1
27
网络安全技术与应用址及端口的一组数据包。所以,动态网络监视接口定义的网络流可以是数据包、管道、文件等实体,可以创建和删除(关闭)网络流,读取、采样或计数一个流的数据包,在网络流上应用某些函数。
(1)创建和终止网络流
① fd=mapi_create_flow(char *dev, cond *c, mode m)创建一个网络流fd。第三个参数m允许监视系统在网络流上执行一些预处理操作,可重新编配数据包,删除数据包,对数据包重新排序等。例如,当m置成COOKED时,单个的数据包按照网络协议(TCP 或UDP)进行预处理然后串成一个数据流。如:mapi_create_flow(“/dev/dag0”, “dst port 80”,RAW) 创建了一个网络流,它的所有数据包是指通过网络接口/dev/dag0去往80号端口的包。
② fd=mapi_close_flow(flow_desc fd)关闭不再需要监视的网络流。(2)从网络流中读出数据包① packet * mapi_get_next_packet(fd)
读取属于网络流fd的下一个数据包(一次读取一个数据包)。
② mapi_loop(flow_desc fd , int cnt , mapi_handler callback)为网络流fd的下一个数据包cnt调用处理程序callback。(3)网络流的应用函数
动态网络监视接口允许用不同的函数去处理不同网络流中的数据包。
mapi_apply_functian(flow_dest fd, function f ,……)函数 f 可以作用于网络流fd的每一个数据包。MAPI提供了一些预定义函数:PACKET_COUNT函数-计算网络流中数据包的个数,SAMPLE_PACKETS 函数-对数据包进行采样。
(4)动态生成网络流
fd=mapi_create_flow("dag0", "port 80" , HIERARCHICAL)创建了hierarchical模式的网络流fd,fd由去往80号端口的所有数据包组成。
用户如想获得通信量统计数据,则只需了解包头信息,不需要了解数据包的负载。hierarchical模式的网络流便可满足用户该项需要。
4.2 动态网络监视接口应用实例:监视FTP的通信
packet *p;
flow_descriptor fd, xfers[1024];Struct byte_count_results br;
int src_port, dst_port, count, total_ft_ptraffic=0;char new_flow[64];
/* 创建一个监视FTP21号控制端口的网络流 */1: fd = mapi_create_flow(/dev/scampi, "tcp port 21", RAW);/* 寻找到指出一个新传输开始的数据包,这样的数据包包含字符串:"227 Entering Passive Mode" */
2: mapi_apply_function(fd, SUBSTRING_SEARCH, "227Entering Passive Mode");
/* 追踪接下来的100个数据包 */3: for(count=0; count<100; count++){4: p=mapi_get_next_packet(fd);
/* extract_ports 得到指出新传输开始的那个数据包,并提取出分配的动态数据端口 */
5: extract_ports(p, &src_port, &dst_port);
/* 创建一个网络流去追踪按照包含在控制数据包中的信息的即将到来的传输 */
6: sprintf(new_flow, "tcp src port %d and dest port %d",port[0], port[1]);
/* 为该数据传输创建一个新流 */
7: xfers[cornt] = mapi_create_flow(/dev/scampi, new_flow,RAW);
/* 计算该流中传输的字节数 */
8: mapi_apply_function(xfers[count], BYTE_COUNT);}/* 结果*/
9: for(count=0; count<l00; count++){
10: mapi_read_results(xfers[count],BYTE_COUNT,&br);11: total_ftp_traffic += br.bytes; }
5 小结
网络数据的截取是网络管理及入侵检测系统的基础。本文介绍了两种网络数据截取机制。在重点讲述了libpcap库的网络数据包截取机制的基础上,引入了一种更为方便有效的网络流监控方法,使网络监控更有目的性。
参考文献
[1]张明武,肖宏年,邹晓.基于NDIS的网络检测与分析.湖北工学院学报.2001.
[2]Marcus J.Ranum,Kent Landfield,Mike Stolarchuk,EricWall.Implimenting a Greneralized Tool for Network MonitoringInformation Security Technical Report.1998.
[3]陈向阳,方汉.Linux实用大全.北京:科学出版社.1999.[4]唐靖飚.UNIX平台下C语言高级编程指南.北京:北京希望电子出版社.2000.
[5]鸵鸟工作室.Linux网络应用大全.北京:机械工业出版社.2001.