LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1151|回复: 1

数据包在经过netfilter为ipv4定义的几个钩子点时数据内容是否有所改变

[复制链接]
发表于 2008-3-4 22:50:44 | 显示全部楼层 |阅读模式
我写了一个简单的netfilter模块,模块功能是把端口为80的数据包给截获下来,然后丢弃。
代码片段如下:

        unsigned char *deny_port = "\x00\x50";

        ip_head = ip_hdr(sk);
        if(ip_head->protocol != IPPROTO_TCP)
        {
                return NF_ACCEPT;
        }
               
        tcp_head = tcp_hdr(sk);
        if(tcp_head->dest == *(unsigned short*)deny_port)
        {         
                return NF_DROP;
        }

情况一  
我用的是传输层的目的端口和deny_port匹配,挂载点是NF_IP_LOCAL_OUT或者NF_IP_POST_ROUTING 这时候网页请求都被截获下来,得到我想要的结果。

奇怪的是情况二

情况二
我修改上面的代码,用传输层的源端口来和deny_port匹配,挂载点试过NF_IP_LOCAL_IN,NF_IP_PRE_POUTING,但是无论用哪一个挂载点,网页数据还是可以到达我的主机。

为什么会这样呢?

谢谢!
 楼主| 发表于 2008-3-5 12:53:08 | 显示全部楼层
问题已解决。
在获取tcphdr的时候做如下判断即可。

tcp_head = tcp_hdr(sk);
if(tcp_head == ip_head)
{
        tcp_head = (struct tcphdr*)(sk->data + ip_head->ihl * 4);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表