Как читать tcp-пакеты, которые были перенаправлены на localhost? - PullRequest
2 голосов
/ 06 июня 2011

Я использую iptables (PREROUTING) для перенаправления всего трафика TCP на локальный порт.

Теперь я хочу перехватить эти пакеты с помощью программы на Си.Я перепробовал множество вариантов сокетов (UDP / TCP / ...), но не могу подключиться к localhost, используя порт, указанный в iptables.

Я вижу, что все пакеты перенаправляются, но как мне это сделать?захватить этот трафик?

Это мои правила (это Android, но не должно быть никаких различий ...):

Chain PREROUTING (policy ACCEPT 32 packets, 5675 bytes)
 pkts bytes target     prot opt in     out     source               destination
FIX ME! implement getprotobynumber() bionic/libc/bionic/stubs.c:384
    0     0 DNAT       tcp  --  any    any     anywhere             anywhere            tcp dpt:5512 to:192.168.1.107

Chain OUTPUT (policy ACCEPT 56 packets, 3433 bytes)
 pkts bytes target     prot opt in     out     source               destination
FIX ME! implement getprotobynumber() bionic/libc/bionic/stubs.c:384
    0     0 DNAT       tcp  --  any    any     anywhere             anywhere            tcp dpt:5512 to:127.0.0.1

Я уже пытался создать сокет TCP / UDP / RAW (Я также думал о «локальных» / UNIX-сокетах, но какой у него адрес?) И ServerSocket / DatagramServer - но я ничего не получил ...

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

Вы можете просто использовать libpcap, который будет захватывать любой трафик, происходящий на устройстве Ethernet, а затем просто отфильтровывать то, что вам нужно / нужно.

Невозможно установить соединение с портом, если нет прослушивания службына нем даже с DNAT.Вам необходимо точно объяснить, что вы пытаетесь выполнить, объяснить настройки сети и какие данные вы пытаетесь захватить.

0 голосов
/ 06 июня 2011

Если вы просто хотите прочитать пакеты, тогда цель ULOG, вероятно, должна быть вашим первым выбором. Вы можете настроить netfilter для отправки пакетов в пользовательское пространство, и демон ulogd может сохранить пакеты в файл или базу данных , поэтому, предположительно, его можно настроить или изменить для отправки пакетов в вашу программу напрямую.

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

...