我使用iptables(PREROUTING)將所有TCP流量重定向到本地端口。如何讀取已重定向到本地主機的tcp數據包?
現在我想用C程序捕獲這些數據包。我嘗試了很多套接字變體(UDP/TCP/...),但我無法使用iptables中指定的端口連接到本地主機。
我可以看到所有正在重定向的數據包,但是如何捕獲此流量?
這些是我的規則(其Android,但should't作任何差異...):
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-Sockets,但它的地址是什麼?)和ServerSocket/DatagramServer - 但我什麼也沒收到...
謝謝!!
我的問題是,所有接收到的數據包將被某些過濾器處理,並且我只能使用libpcap接收處理過的數據包。所以我想要的是在過濾前閱讀原始數據包。我可以在計數器上看到我的過濾器 - 但我如何處理這些重定向到指定端口的原始包? – 2011-06-05 23:25:43
然後,您需要執行sarnold說的並使用ULOG,或者您可以使用NFQUEUE過濾器,它允許您編寫檢查/修改/保存它們的服務。請參閱此處瞭解NFQUEUE示例 - http://www.debian-administration.org/article/Filtering_traffic_based_on_thousands_of_IPs_efficiently – Geoffrey 2011-06-05 23:31:06