В рамках своей докторской диссертации я компилирую ядро linux-2.6.28 для поддержки встроенных в ядро возможностей фильтрации l7.
Я добавляю в iptables одно правило со следующим:
iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j NFQUEUE
Я написал стандартную программу захвата, используя libipq для чтения пакетов из очереди.
Для тестирования я отправляю один сеанс http, состоящий из 18 пакетов, которые включают два HTTP-запроса и данные ответа с другого компьютера.
Проблема в том, что моя программа захвата получает только два пакета, первые пакеты HTTP-ответов (которые соответствуют фильтру), в то время как я надеюсь получить все 18 пакетов.
Что мне нужно, так это иметь возможность читать все пакеты (не только согласованные пакеты) согласованного сеанса.
Например, если я хочу захватывать и анализировать сеансы сообщений электронной почты Yahoo только среди всех сеансов HTTP, могу ли я использовать l7filter для передачи только пакетов соответствующих сеансов (сеанс сообщений электронной почты Yahoo)?
Спасибо.
Если все, что вы пытаетесь сделать, это фильтровать захват пакетов, чтобы видеть только HTTP-трафик к определенному хосту, вы, вероятно, можете просто сделать это, посмотрев на порт и хост. Используйте tcpdump или tshark с фильтрами. Что-то вроде:
tcpdump -i eth0 tcp порт 80 или 443
Должен давать вам только HTTP-трафик (на стандартные порты).
Если вы хотите сузить его до определенных IP-адресов / сетей, добавьте их также в фильтр:
tcpdump -i eth0 '(TCP-порт 80 или 443) и net 123.123.123.123/24'