我从镜像端口接收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 ...