我在 libnetfilter_queue 库中使用。
我需要更改数据包中的 dest ip。我更改 dest ip 并重新注入数据包: nfq_set_verdict(qh, id, NF_ACCEPT,size, originalPacket);
但改变没有生效。
但是,如果我更改数据包,请将其复制到新的 char 数组并调用以使用复制的数组设置判决,而不是更改生效。
难道我做错了什么?
谢谢
我在 libnetfilter_queue 库中使用。
我需要更改数据包中的 dest ip。我更改 dest ip 并重新注入数据包: nfq_set_verdict(qh, id, NF_ACCEPT,size, originalPacket);
但改变没有生效。
但是,如果我更改数据包,请将其复制到新的 char 数组并调用以使用复制的数组设置判决,而不是更改生效。
难道我做错了什么?
谢谢
需要使用 NF_REPEAT 判决将数据包重新注入同一链。使用 NF_ACCEPT 判决将数据包注入后续链。但是为了这个目的,你应该标记数据包以避免循环,即:
iptables -t raw -A PREROUTING -p tcp -m tcp --dport 80 -m mark !
--mark 0x1/0x1 -m tcp -j NFQUEUE
iptables -t raw -A PREROUTING -p tcp -m tcp --dport 80 -m mark --mark
0x80/0x80 -m tcp ACCEPT # altered packets
iptables -t raw -A PREROUTING -p tcp -m tcp --dport 80 -m mark --mark
0x1/0x1 -m tcp ACCEPT # rest