端口镜像--一个神奇的问题
使用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才能抓到包(发)
反之亦然
这中间不知道哪里出了问题。请大神指点指点 顶起。坐等大神施以援手 昨天分析了下IP层和链路层之间的skb包流程。没发现啥冲突的啊。有大神来瞅瞅不
页:
[1]