我使用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套接字(我也考虑过"local“/ UNIX-Sockets,但是它的地址是什么?)和ServerSocket / DatagramServer -但我什么也没收到...
谢谢!!
发布于 2011-06-06 07:19:50
您可以只使用libpcap,它将捕获以太网设备上发生的任何流量,然后过滤出您想要/需要的内容。
如果没有服务在端口上侦听,则无法连接到端口,即使使用DNAT也是如此。您需要准确地解释您试图实现的目标,解释您的网络设置以及您尝试捕获的数据。
发布于 2011-06-06 07:12:53
如果您只是想读取数据包,那么ULOG目标可能是您的首选。您可以将netfilter配置为将数据包发送到用户空间,并且ulogd守护进程可以save the packets to a file or database,因此可以对其进行配置或修改,以直接将数据包发送到您的程序。
另一方面,如果你试图做一些巧妙的插入来创建一个透明的虚拟专用网或类似的东西,ULOG可能会有一点太多的工作。
https://stackoverflow.com/questions/6246471
复制相似问题