Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4741894
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2008-12-08 23:40:05

概述

在此,我们将操作内核源代码以扩展内核本地数据包截获能力。

内核源文件位于 /usr/src/linux,要修改的两个主要文件是 ip_input.c 和 ip_output。这两个文件位于 /usr/src/linux/net/ipv4/ 目录中。

源文件修改:ip_input.c

ip_input.c 包含这两个函数,可以为所有流入数据包调用它们: incoming packets:


ip_local_deliver(struct sk_buff, struct device,struct packet_type)

为所有的流入数据包执行而不考虑目的地


ip_rcv(struct sk_buff, struct device,struct packet_type)

为目的地是本地机器的所有数据包进行调用

  • sk_buff
    TCP/IP 协议栈中数据包的容器。
  • device
    设备结构。
  • packet_type
    数据包的类型:流入或流出。

ip_rcv 执行 IP 层所需的几个任务,包括重新装配、校验和计算等。

由于 ip_rcv 处理所有流入的 IP 数据包,因此这是一个添加要对流入数据包执行任何附加代码的好地方。其他选项是用于编写自己的 ip_rcv 例程的。

源文件修改:ip_output.c

与 ip_output 一样,ip_output.c 位于 /usr/src/linux/net/ipv4/ 目录中,它处理流出的数据包。它的四个函数是:


ip_build_and_sent_pkt(struct sk_buff,struct sock,u32 saddr,u32
daddr, struct ip_options)

将 IP 报头添加到 sk_buff 并将其发送出去


ip_queue_xmit(struct sk_buff)

对要发送的数据包排队


ip_build_xmit_slow()

构建和传送数据包


ip_build_xmit()

“快速”构建和传送数据包,该选项只用于无需碎片整理的选项。

只有 ip_build_xmit_slowip_build_xmit 处理所有流出的 IP 数据包,因此任何额外处理均可在任何阶段完成。对于 ip_input.c,其他选项用于编写自己的例程,然后从这些例程中调用最初的函数。您选择的策略依赖于您要实现的功能。

使用 Makefiles 修改源代码

可以使用 Makefiles 动态修改内核源代码;Makefile 脚本确保对源代码做必需的修改。可以使用一条命令(make installmake uninstall)添加或删除数据包拦截器,然后重新编译内核并重新启动机器。

由于该机制要求修改 Linux 内核源代码,所以快速调试可能非常困难。而且,由于该方法要求重新编译内核,所以这个过程是冗长、复杂且不灵活的。

阅读(944) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~