Используя libnetfilter_queue, повторно вставленный пакет не влияет на изменение, однако вставка копии пакета выполняется успешно. Почему?

Я использую библиотеку libnetfilter_queue.

Мне нужно изменить IP-адрес назначения в пакете. Я меняю IP-адрес получателя и повторно ввожу пакет: nfq_set_verdict(qh, id, NF_ACCEPT,size, originalPacket);

но изменение не вступило в силу.

Однако, если я изменю пакет, скопирую его в новый массив символов и позвоню, чтобы установить вердикт с скопированным массивом, после чего изменение повлияет.

Я делаю что-то неправильно?

Спасибо


person Avihai Marchiano    schedule 16.07.2012    source источник


Ответы (1)


необходимо использовать вердикт 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
person Avihai Marchiano    schedule 04.08.2012