没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux中的网络数据包捕获
资源详情
资源推荐
Linux 中的网络数据包捕获
Ashish Chaurasia, 工程师
简介: 本教程介绍了捕获和操纵数据包的不同机制。安全应用程序,如 VPN、防火 墙和
嗅探器,以及网络应用程序,如路由程序,都依赖类似于本文描述的方 法来完成工作。一
旦接触到它们,您将会离不开它们。
标记本文!
发布日期: 2004 年 5 月 31 日
级别:初级
访问情况5964 次浏览
建议:2(查看或添加评论)
平均分
(共
6
个评分
)
开始之前
关于本教程
目前,信息要通过管道(也就是网络)传输,需要花很多时间封装在数据包中。在本教程中,我们将在
这些数据包传输过程中捕获它们,捕获数据包所采用的平台是。
大多数网络应用程序――从虚拟专用网()到路由程序,再到嗅探器――都具有某种数据包捕获机
制。因此,编写此类软件的任何人都可以从本教程中受益。
由于我们将要研究的几种数据包过滤机制都是内核模块,所以还将简要地介绍这些模块以及内核编译。
我们还将回顾一些我没有成功使用的机制:我只能获得数据包的一个副本而无法截获最初的数据包。这
里的讨论不仅能省去您重复我所做工作的麻烦,而且还对编写网络应用程序(如嗅探器)很有用。
除大致熟悉不同的数据包捕获机制(如防火墙钩子、和)外;读者还应具备有
关网络和协议栈方面的知识。开始之前最好了解一些源代码的知识。
回页首
前提条件
本教程最适合那些以前在系统编程、Linux 网络和 Linux 内核模块方面 至少有一些经验的
读者。但是,本教程尽可能简单地给出一些概念,并在适当的时候给 予详细解释,因此,
即使读者缺少一种或多种这方面的知识,也能从本文的讨论中获益。
简介
数据包捕获
TCP/IP 协议栈是 Linux 网络的重要支柱,其体系结构设计得非常优美。
数据包
是 TCP/IP 协议栈 中信息
流的载体。在 Linux 网络编程中,许多有意义的工作都包括了捕获这些信息丰富的数据包、提取或操作这
些数据包所包含的信息。
数据包捕获
对我们而言意味着某种机制,即获取一个数据包,直到达到所要求的目 的后才将其释放,以
便该数据包能够按照常规路径通过其余的任何处理。其他相同或相似 操作的术语有
数据包过滤、数据包
嗅探、网络嗅探
以及
数据包
或
网络监视
。
数据包过滤是许多网络软件的基础,这些软件有网络监视工具、VPN、网络分析程序、路由 程序、入侵
监测系统(Intrusion Detection Systems,IDS)和嗅探器。
Linux 提供了多处可以捕获数据包的位置,既包括用户空间,又包括内核空间。下图展示了网络数据包流
过 TCP/IP 协议栈的路径:
图 1. 网络数据包通过协议栈的路径
如上图所示,流入的数据包通过以太网层、网络层、TCP 协议栈并穿过套接字层, 然后才能被复制到用
户空间中。在所有这些断点处,数据包都很容易被捕获到。本教程讨 论的方法大多在网络层和用户空间
中有效。
然而,由于 Linux 和 Linux 内核在不断发展,这里讨论的某些数据包捕获方法仅在特定 的内核中有效。
例如,divert socket 对打过补丁的 2.2.12 内核有效,而 netfilter 对 内核 2.4.x 和 2.6.x 有效。在讨论各种
方法时始终要注意这些细节。
Linux 可加载的内核模块(LKM)概述
捕获数据包的模块
本教程探讨的大多数数据包捕获机制都是以 Linux 内核模块的方式工作的,因此我们现在简 要讨论一下
这些模块。如果您有很强的 LKM 背景,则可以跳至下一节编译内核。
回页首
什么是 LKM?
可加载内核模块
是内核的扩展,可以在需要时附加到内核中,或从内核中删除。LKM 基本上是设备驱动
程序的软件实现,它与真实的或者虚拟的硬件设备协同工作。当 LKM 加 载到内核中时,它们监听和处理
对设备的任何请求。由于只加载所需的 LKM,因此使 用 LKM 可使内核变得轻便、模块化、灵活和可伸
缩。
回页首
LKM 体系结构
编写 Linux 内核模块的体系结构如下:
1. init_module
这个 LKM 初始化函数是强制执行的。当 LKM 加载到内核时触发该函数,因此 所有初始化工作
都是在这个函数中完成的。
2. 处理特定的函数
这些函数执行实际的工作,如读、写、打开、关闭设备,等等。
3. cleanup_module
当从内核中删除 LKM 时,调用 LKM 的这个强制执行函数。因此,所有清除工作 如释放内存等
都应在这个函数中执行。
回页首
编译 LKM
编写 LKM 后,可以采用下列命令编译它:
该命令产生一个名为 <module_name>.o 的文件,它就是 LKM,可以使用下列命令将它加载
到 内核中:
!
(-f选项意味着强制加载。)
如果在加载模块时遇到任何内核版本问题,可以通过在加载 LKM 时包含这个特定内核 的头文件来解决问
题。因此,在编译内核时,请使用-I/usr/src/linux/include。
还可以使用 Makefile 来解决此类版本问题,但这超出了本教程的范围。在本教程的末 尾,您还可以在参
考资源中找到有关 LKM 编程的更多信息。
回页首
卸载 LKM
一旦模块加载到内核中,它将开始执行预定的功能。使用命令lsmod可 以看到当前所有加载的 LKM
的列表。
可以使用rmmod <module_name>从内核中加载或删除模块。
编译内核
回顾
本教程讨论的许多机制都要求设置某些内核选项,然后重新编译内核。因此在开始前,我 们将复习内核
编译的步骤。如果您已经了解内核编译,则可以跳至下一 节数据包截获:防火墙钩子,在那里开始复习
数据包捕获机制。
回页首
步骤
重新编译内核:
1. make xconfig
允许设置不同的内核选项。(也可以使用make menuconfig或make config;
这只是个人偏好问题。)
2. make dep
解决内核编译的文件依赖性。
3. make bzImage
编译(make)内核映像并将其存储在 vmlinuz 中。
4. make install
将 vmlinuz 复制到 /boot 目录中,并将二进制文件复制到正确的位置。
5. make modules
编译所有内核模块。
6. make modules_install
在正确的位置安装模块(通常位于 /lib/modules/<kernel-version> )。
接着,您应将关于最近编译内核的信息添加到 /etc/lilo.conf(如果不在该位置的 话),然后重新启动机器。
您会在重新启动过程的开始看到列出的新内核选项。
数据包截获:防火墙钩子
概述
防火墙钩子(Firewall hook) 已引入到 2.2.16 内核中,它是 2.2.x 内核运行的数据包截获方法。 防火墙
钩子在 TCP/IP 协议栈的 IP 层截获数据包。
防火墙钩子在功能上充当 Linux 可加载内核模块(LKM)或伪设备驱动程序,可以根据 需要从内核中加
载或卸载。
要使用防火墙钩子,请在内核编译期间启用 firewalling 选项 (在 Networking 选项下列出)。
您可以使用该数据包截获机制来开发路由程序、VPN、数据包嗅探器或位于网络边 缘且要求实时捕获数
据包的任何其他网络应用程序。
回页首
填充结构
内核定义的 firewall_ops 结构是防火墙钩子的基础。可以用这些结构来指定各种 数据包策略,这些策略可
以是非常特殊的,也可以是很普通的。
rewall_ops 结构位于 /usr/src/linux/include/linux/rewall.h 中,类似如下:
"#
$
"#%
&'!"!"(&"#')*#!*
'*'#)*
'*
+,''#+(%
&'!"#(&"#')*#!*
'*'#)*
'*+,
''#+(%
剩余19页未读,继续阅读
melochale
- 粉丝: 3
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功