Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21120
  • 博文数量: 6
  • 博客积分: 477
  • 博客等级: 下士
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-28 17:10
文章存档

2010年(1)

2009年(5)

我的朋友
最近访客

分类: LINUX

2009-12-29 09:58:33

((以下内容只是个人在开发中的理解和感悟,如果有不正确的地方请大家不吝指出,谢谢)

看了一下26.18.3的协议栈源码,理清楚了一点疑问,在这里写下,。

分析片段:

  在函数中ip_output中最终调用了NF_HOOK_COND宏,从这个宏的参数看得出,它会历遍

NF_IP_POST_ROUTING链上的钩子函数,然后调用ip_finish_output.然后我们进入到

ip_finish_output,,可以看出ip_finish_out的逻辑是这样的,如果得到的数据包是

大于MTU的那么就是执行ip_fragment函数,否则直接返回ip_finish_output2,它接着调

用hh_output也就是dev_queue_xmit把数据包传到数据链路层了。

  以上说明了什么呢,让我们先回到nat模块,nat模块的钩子函数就有一个关于ip包重新分

块的钩子函数注册在NF_IP_POST_ROUTING链,而且是最低优先级的。以上说明了

NF_LOCAL_OUT链最高优先级的钩子函数到NF_POST_ROUTING的最低优先级的钩子函数之间的

所有注册了的钩子函数处理的ip包都是完整的(其中nat在NF_POST_ROUTING链的最低优先级

的地方重新分块,协议栈本身在调用完所有的这个链的钩子函数后重新分块)。

  关于NF_LOCAL_OUT的问题,同理是nat模块在这个链的最高优先级的地方注册了一个关于

重组ip包的钩子函数,所以才说nat增强了防护ip碎片攻击的能力。

  最后说一点实际点的事情,就是你如果要在网桥式透明防火墙上面进行扩展开发,你在什么环境下怎样调试你的程序呢。

  优先级0:如果你有一台主机,带了2个以太网卡,good,这是最好的,你就在这台上开发就行了,上面文章提到的所有东东可以立即忘掉。

 优先级1:你只有一台主机,带一个以太网卡,hell,认真分析protocol stack源码和上面的文章。

 优先级2:VMware吧,我试过网桥是这个事行不通的,根本原因是虚拟机的两个以太网口没从硬件上分开,只是逻辑上,所以很难成功,不过可能有其他办法。

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