使用iptables过滤镜像端口stream量

我从镜像端口接收stream量,我想将其发送到NFQUEUE进行处理。 由于镜像端口,数据包目标MAC地址不是我的主机MAC地址。 所以stream量永远不会到达我的NFQUEUE。 (如果我采取一个数据包,我用Scapy手动replace目标MAC地址与我的主机MAC地址,它的工作原理)

即使在过滤pipe道中尽可能快地应用了iptable规则,它也不能与镜像端口一起工作:

iptables -A PREROUTING -t raw -j NFQUEUE --queue-num 1 

正如在其他一些线程中提到的,我尝试在我的界面上创build一个网,并使用以下命令过滤stream量。

 tunctl -u root brctl addbr br0 brctl addif br0 eth0 brctl addif br0 tap0 brctl setfd br0 0 brctl stp br0 off ifconfig br0 up ifconfig eth0 up 0.0.0.0 ifconfig tap0 up 0.0.0.0 echo 0 > /sys/class/net/br0/bridge/ageing_time echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables iptables -F iptables -A FORWARD -j NFQUEUE --queue-num 1 

但即使这个解决scheme不能解决我的问题。 由于bridge-nf-call-iptables指令,stream量不通过网桥。 但是我无法在队列中获取数据包。

顺便说一句,我的内核版本是3.13.0-32。

我正在寻找任何解决scheme,允许将随机MAC地址收到数据包到我的NFQUEUE。

感谢您的帮助,Julien

您的内核会忽略不发往本地networking接口的软件包。 您应该将eth0更改为混杂模式:

 ip link set dev eth0 promisc on 

你可以通过networkingconfiguration来实现这个function:

Debian的

 auto eth0 iface eth0 inet manual up ifconfig eth0 promisc up down ifconfig eth0 promisc down 

红帽

 BOOTPROTO=static DEVICE=eth0 TYPE=Ethernet PROMISC=yes ...