237663598 发表于 2013-11-13 18:33

端口镜像--一个神奇的问题

使用netfilter做端口镜像,比如:eth1镜像到eth0,要求将eth1收到的包以及发送的包都镜像到eth0

一:
    在NF_INET_PRE_ROUTING这个hook点挂钩子函数抓包,然后skb_clone一份包nskb,钩子函数中将nskb处理下,再调用dev_queue_xmit将nskb从eth0(修改nskb->dev)发出去。
   经验证,该做法完全OK,wireshark可以从eth0抓到eth1收到的包

二:
    在NF_INET_POST_ROUTING这个hook点挂钩子函数抓包,然后skb_clone一份包nskb,钩子函数中nskb通过ip_finish_output函数继续从eth0(修改nskb->dev)发出去。
    经验证,该做法完全OK,wireshark可以从eth0抓到eth1发送的包
注:ip_finish_output是通过kallsyms_lookup_name调出来用的

问题来了。当我分别使用上述两种做法进行抓包,可以做到:抓取eth1的发送包或者抓取eth1的收到包
当我将以上两个钩子函数放在一个ko里,挂两个钩子。我认为可以既抓到发送包,也抓到收包。
可是事实却是:两种包wireshark都抓不到了

当我将ko1(收)insmod,则wireshark能抓到包(收)。rmmod后,再insmod ko2(发),wireshark抓不到包了。要过一段时间(好几分钟)wireshark才能抓到包(发)
反之亦然

这中间不知道哪里出了问题。请大神指点指点

237663598 发表于 2013-11-14 10:14

顶起。坐等大神施以援手

237663598 发表于 2013-11-15 10:51

昨天分析了下IP层和链路层之间的skb包流程。没发现啥冲突的啊。有大神来瞅瞅不
页: [1]
查看完整版本: 端口镜像--一个神奇的问题