2

我使用 iptables (PREROUTING) 将所有 TCP 流量重定向到本地端口。

现在我想使用 C 程序捕获这些数据包。我尝试了很多套接字变体(UDP / TCP / ...),但我无法使用我在 iptables 中指定的端口连接到 localhost。

我可以看到所有被重定向的数据包,但是如何捕获此流量?

这些是我的规则(它的 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 Socket(我也考虑过“本地”/UNIX-Sockets,但它的地址是什么?)和 ServerSocket/DatagramServer——但我什么也没收到……

谢谢!!

4

2 回答 2

1

您可以只使用 libpcap 来捕获以太网设备上发生的任何流量,然后过滤掉您想要/需要的内容。

You cant make a connection to a port if there is no service listening on it, even with DNAT. You need to explain exactly what your trying to accomplish, explain your network setup and what data your trying to capture.

于 2011-06-05T23:19:50.270 回答
0

如果您只是想读取数据包,那么ULOG目标应该是您的首选。您可以配置 netfilter 将数据包发送到用户空间,并且ulogd守护程序可以将数据包保存到文件或数据库中,因此可以配置或修改它以直接将数据包发送到您的程序。

另一方面,如果你试图做一些巧妙的插入来创建一个透明的 VPN 或类似的东西,ULOG可能会有点太多的工作。

于 2011-06-05T23:12:53.000 回答