基于 linux 平台的 libpcap 源代码分析.doc 立即下载
2024-12-05
约2万字
约28页
0
72KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

基于 linux 平台的 libpcap 源代码分析.doc

基于linux平台的libpcap源代码分析.doc

预览

免费试读已结束,剩余 23 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于linux平台的libpcap源代码分析
libpcap
是unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础。Libpcap可以在绝大多数类unix平台下工作,本文分析了libpcap在linux下的源代码实现,其中重点是linux的底层包捕获机制和过滤器设置方式,同时也简要的讨论了libpcap使用的包过滤机制BPF。
网络监控
绝大多数的现代操作系统都提供了对底层网络数据包捕获的机制,在捕获机制之上可以建立网络监控(NetworkMonitoring)应用软件。网络监控也常简称为sniffer,其最初的目的在于对网络通信情况进行监控,以对网络的一些异常情况进行调试处理。但随着互连网的快速普及和网络攻击行为的频繁出现,保护网络的运行安全也成为监控软件的另一个重要目的。例如,网络监控在路由器,防火墙、入侵检查等方面使用也很广泛。除此而外,它也是一种比较有效的黑客手段,例如,美国政府安全部门的"肉食动物"计划。

包捕获机制
从广义的角度上看,一个包捕获机制包含三个主要部分:最底层是针对特定操作系统的包捕获机制,最高层是针对用户程序的接口,第三部分是包过滤机制。
不同的操作系统实现的底层包捕获机制可能是不一样的,但从形式上看大同小异。数据包常规的传输路径依次为网卡、设备驱动层、数据链路层、IP层、传输层、最后到达应用程序。而包捕获机制是在数据链路层增加一个旁路处理,对发送和接收到的数据包做过滤/缓冲等相关处理,最后直接传递到应用程序。值得注意的是,包捕获机制并不影响操作系统对数据包的网络栈处理。对用户程序而言,包捕获机制提供了一个统一的接口,使用户程序只需要简单的调用若干函数就能获得所期望的数据包。这样一来,针对特定操作系统的捕获机制对用户透明,使用户程序有比较好的可移植性。包过滤机制是对所捕获到的数据包根据用户的要求进行筛选,最终只把满足过滤条件的数据包传递给用户程序。

Libpcap应用程序框架
Libpcap提供了系统独立的用户级别网络数据包捕获接口,并充分考虑到应用程序的可移植性。Libpcap可以在绝大多数类unix平台下工作,参考资料A中是对基于libpcap的网络应用程序的一个详细列表。在windows平台下,一个与libpcap很类似的函数包winpcap提供捕获功能,其官方网站是http://winpcap.polito.it/。

Libpcap软件包可从http://www.tcpdump.org/下载,然后依此执行下列三条命令即可安装,但如果希望libpcap能在linux上正常工作,则必须使内核支持"packet"协议,也即在编译内核时打开配置选项CONFIG_PACKET(选项缺省为打开)。

./configure
./make
./makeinstall



libpcap源代码由20多个C文件构成,但在Linux系统下并不是所有文件都用到。可以通过查看命令make的输出了解实际所用的文件。本文所针对的libpcap版本号为0.8.3,网络类型为常规以太网。Libpcap应用程序从形式上看很简单,下面是一个简单的程序框架:

char*device;/*用来捕获数据包的网络接口的名称*/
pcap_t*p;/*捕获数据包句柄,最重要的数据结构*/
structbpf_programfcode;/*BPF过滤代码结构*/
/*第一步:查找可以捕获数据包的设备*/
device=pcap_lookupdev(errbuf);
/*第二步:创建捕获句柄,准备进行捕获*/
p=pcap_open_live(device,8000,1,500,errbuf);
/*第三步:如果用户设置了过滤条件,则编译和安装过滤代码*/
pcap_compile(p,&fcode,filter_string,0,netmask);
pcap_setfilter(p,&fcode);
/*第四步:进入(死)循环,反复捕获数据包*/
for(;;)
{
while((ptr=(char*)(pcap_next(p,&hdr)))==NULL);
/*第五步:对捕获的数据进行类型转换,转化成以太数据包类型*/
eth=(structlibnet_ethernet_hdr*)ptr;
/*第六步:对以太头部进行分析,判断所包含的数据包类型,做进一步的处理*/
if(eth->ether_type==ntohs(ETHERTYPE_IP))
…………
if(eth->ether_type==ntohs(ETHERTYPE_ARP))
…………
}
/*最后一步:关闭捕获句柄,一个简单技巧是在程序初始化时增加信号处理函数,
以便在程序退出前执行本条代码*/
pcap_close(p);



检
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

基于 linux 平台的 libpcap 源代码分析

文档大小:72KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用