免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: duanjigang

Hacking the Linux Kernel Network Stack(译本) [复制链接]

论坛徽章:
0
发表于 2006-05-30 10:35 |显示全部楼层
这个东西很早之前就有了吧。。。。。
raodan 翻译的

论坛徽章:
0
发表于 2006-05-30 10:36 |显示全部楼层
看看有什么新东西,呵呵

论坛徽章:
0
发表于 2006-05-30 12:55 |显示全部楼层
(1)"如果我没理解错的话(学习中),data指针指向的是当前层次上要处理的数据的头,ICMP与IP同属网络层,所以在这一层上 ,data指向的是IP数据头,同理若在传输层,data应指向tcp或UDP头,若在连路层data 应指向Eth头
", sb->data 改成sb->nh.iph也可以(这个我用程序试研了),可能作者这种写法更有层次感吧,不知如此解释对是否合适???
(2):在POSTROUTING点可以注测多个HOOK,作为向外发送的数据来说,在此处会被每个注测了的HOOK进行处理,处理的先后顺序跟priority密切相关,如果有一个注测了的钩子比我们注测的这个钩子提前调用,我们能保证数据中的用户名和密码这些数据不被影响(或着改动)吗?为了保证watch_out的功能,才将它的优先权设为最高。
如果有哪里理解错误的话,希望白金兄及时指出. ^_^

[ 本帖最后由 duanjigang 于 2006-5-30 13:00 编辑 ]

论坛徽章:
0
发表于 2006-05-30 15:18 |显示全部楼层
我感觉第二点分析得很有道理 ^_^

第一点我有个地方不明白,下面我说一下

>> data指针指向的是当前层次上要处理的数据的头
同意

>> ICMP与IP同属网络层
icmp 头的位置与 tcp/udp 的位置是一样的,而 tcp/udp 不属于网络层,为何说 icmp 是网络层,这点我始终没能理解

>> 所以在这一层上 ,data指向的是IP数据头
同意,若 sk_buff 指向的确实是一个 IP 层的话

>> 同理若在传输层,data应指向tcp或UDP头,若在连路层data 应指向Eth头
问题是,我们怎么知道当前是什么层呢?

论坛徽章:
0
发表于 2006-05-30 22:12 |显示全部楼层
对sk->data指针在各个状态下指向哪一层觉得很模糊.
处理时在交换mac地址之后把data指针指向连路层的头就把包发回去.
能不能这样理解, 在PRE_ROUTING时候data指向ip头, POST_ROUTING之后指向连路层.
另外,觉得在dev_queue_xmit之前应该把icmph->type 改为 ICMP_ECHOREPLY. 因为我在单机调试, 收到的包发出,又给netfilter劫获,就死循环了. 不断的发,劫获,再发,再劫获. 把它改了类型,再劫获之后就可以NF_ACCEPT了. 避免了死循环.

论坛徽章:
0
发表于 2006-05-31 13:52 |显示全部楼层
请教了一位同事,解释如下:
(1)用data+..还是用 iph+.......
我认为原代码的写法是正确的,即用data+........
在协议的不同层,sk_buff的data指向这一层的网络报文头部,同时在这个结构体中,也有相关的数据结构来表示不同层的头部信息,这样无论在哪一层,代码结构都是不变的,而如果改为后面那种(iph+...),则只适用于传输层了.

论坛徽章:
0
发表于 2006-05-31 19:37 |显示全部楼层
>> 能不能这样理解, 在PRE_ROUTING时候data指向ip头
我也是这样认为的

>> POST_ROUTING之后指向连路层
为什么?

>> 在协议的不同层,sk_buff的data指向这一层的网络报文头部,同时在这个结构体中
>> 也有相关的数据结构来表示不同层的头部信息,这样无论在哪一层,代码结构都是不变的
>> 而如果改为后面那种(iph+...),则只适用于传输层了.
没理解,尤其是“这样无论在哪一层,代码结构都是不变的”这一句
“而如果改为后面那种(iph+...),则只适用于传输层了”这句我也没有理解,是不是说,如果在链路层,(struct sk_buff *)skb->iph 实际上是 NULL ?

论坛徽章:
0
发表于 2006-06-08 15:46 |显示全部楼层
呵呵,一直对5个HOOKS的触发时机不是很清楚,今天正好碰到一篇文章,给出了图示,很明了,附加上来:
IP层的五个HOOK点的位置如下图所示 :

          --->[1]--->[ROUTE]--->[3]--->[5]--->
                        |            ^
                        |            |
                        |         [ROUTE]
                        v            |
                       [2]          [4]
                        |            ^
                        |            |
                        v            |
                       [local process]

[1]:NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验和等检测),源地址转换在此点
进行;
[2]:NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行;
[3]:NF_IP_FORWARD:要转发的包通过此检测点,FORWORD包过滤在此点进行;
[4]:NF_IP_LOCAL_OUT:本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行;
[5]:NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的包通过此检测点,内置的目的地址转换功能(包括地址伪装)在此点进行。

[ 本帖最后由 duanjigang 于 2006-6-8 15:56 编辑 ]

论坛徽章:
0
发表于 2006-06-14 08:31 |显示全部楼层
好文!

论坛徽章:
0
发表于 2006-06-14 13:09 |显示全部楼层
to: duanjigang  图有问题 OUTPUT的路由之后应该不经过forward了。
另外感觉 Kernel Packet Traveling Diagram  这副图更详细。
版主platinum的blog就有一份。 http://www.cublog.cn/u/311/showart.php?id=70642
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP