我使用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 - 但我什么都没收到......
谢谢!
答案 0 :(得分:0)
如果您只是想读取数据包,那么ULOG
目标应该是您的首选。您可以配置netfilter将数据包发送到用户空间,ulogd
守护程序可以save the packets to a file or database,因此可以配置或修改它以直接将数据包发送到您的程序。
另一方面,如果你试图做一些聪明的插入来创建一个透明的VPN或类似的东西,ULOG
可能会有点太多的工作。
答案 1 :(得分:0)
您可以使用libpcap来捕获以太网设备上发生的任何流量,然后过滤掉您想要/需要的内容。
如果没有服务侦听,即使使用DNAT,您也无法建立与端口的连接。您需要准确解释您要完成的工作,解释您的网络设置以及您尝试捕获的数据。