Linux libnetfilter_queue проблема с задержкой пакета

1

Мне нужно фильтровать и изменять сетевой трафик с помощью Linux kernel libnetfilter_queue (именно привязки python) и dpkt, и я пытаюсь реализовать задержанный пакет вперед.

Обычная фильтрация работает очень хорошо, но если я пытаюсь отложить пакеты с функцией вроде этого

def setVerdict(pkt, nf_payload):
    nf_payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(pkt), len(pkt))


t = threading.Timer(10, setVerdict, [pkt, nf_payload])
t.start() 

Он разбивается, не вызывая никаких исключений (конечно, это крах низкого уровня). Могу ли я реализовать задержку, используя прямое libnetfilter, подобное этому, или я должен скопировать pkt, удалить его и отправить копию, используя стандартный socket.socket.send()?

Спасибо

Теги:
networking
netfilter

2 ответа

3
Лучший ответ

Извините за поздний ответ, но мне нужно было сделать что-то подобное, хотя и немного сложнее. Я использовал версию библиотеки C-, и я скопировал пакеты в буфер внутри моей программы, а затем выпустил вердикт DROP. После тайм-аута, связанного с вашей задержкой, я повторно запускаю пакет, используя сырой сокет. Это прекрасно работает и кажется довольно эффективным.

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

  • 0
    Пожалуйста, не могли бы вы предоставить пример кода для этого ответа? Документация по libnetfilter_queue довольно скудная.
0

Я не могу ответить на ваш вопрос, но почему бы не использовать модуль очереди "netem" traffic- на исходящем интерфейсе для задержки пакета?

Можно настроить tc queues для применения различных политик к пакетам, которые "помечены" каким-то образом; обычным способом маркировки таких пакетов является модуль netfilter (например, iptables или nfqueue).

  • 0
    Я должен использовать libnetfilter_queue: |

Ещё вопросы

Сообщество Overcoder
Наверх
Меню