pcap и iptables борьба - PullRequest
       23

pcap и iptables борьба

0 голосов
/ 19 апреля 2010

Я установил DNS-сервер на машине. Я хочу перехватить ответы DNS перед отправкой машины, изменить некоторые поля в ней и затем отправить пакет.

Я могу изменять только поля в пакете, который захватывает мой код pcap (написанный на C), который выглядит как копия, поскольку также передается исходный пакет.

Я попытался iptables отбросить пакеты, исходящие с машины, но он также отбрасывает пакеты, введенные в pcap.

Есть ли выход из этого?

спасибо

1 Ответ

1 голос
/ 21 апреля 2010

Если вы ищете решение только для pcap, вам нужно будет перехватить пакет DNS-запроса, изучить его и собрать правильный ответ, прежде чем DNS-сервер ответит. Это не кажется надежным, потому что, если DNS-сервер имеет кешированную запись, он, скорее всего, ответит до того, как ваш пользовательский код для сборки пакета и его отправки может закончить.

Самый надежный способ сделать это - написать модуль ядра, который является ловушкой сетевого фильтра. Хуки Netfilter способны проверять пакет и влиять на его обработку в нескольких точках, прежде чем пакет покинет машину. Подцепите его на уровне NF_IP_LOCAL_OUT. Затем вы можете проверить исходящий пакет и посмотреть, соответствует ли это DNS-ответу вашим критериям. В следующей части я этого не сделал, но, поскольку у вас есть прямой доступ к skb (буферу сокета) в качестве входного параметра для вашей пользовательской функции подключения, вы можете изменить пакет прямо здесь и вернуть NF_ACCEPT, чтобы передать ответ клиенту. , Если вам необходимо выполнить некоторую обработку самого запроса, вы можете вместо этого подключиться к NF_IP_LOCAL_IN и обработать его любым количеством способов, включая передачу его в программу пользовательского пространства.

Существует множество примеров программирования ядра Google для Linux (поиск: Программирование модуля ядра Linux), а также примеры ловушек сетевого фильтра.

...