2011-06-05 21 views
2

我使用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 - 但我什麼也沒收到...

謝謝!!

回答

0

您可以使用libpcap,它將捕獲以太網設備上發生的任何流量,然後只是過濾掉你想要/需要的東西。

即使使用DNAT,如果沒有監聽服務,您無法連接端口。你需要解釋你想要完成什麼,解釋你的網絡設置以及你試圖捕獲什麼數據。

+0

我的問題是,所有接收到的數據包將被某些過濾器處理,並且我只能使用libpcap接收處理過的數據包。所以我想要的是在過濾前閱讀原始數據包。我可以在計數器上看到我的過濾器 - 但我如何處理這些重定向到指定端口的原始包? – 2011-06-05 23:25:43

+0

然後,您需要執行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

0

如果您只是想讀取的數據包,那麼ULOG目標應該可能是您的第一選擇。您可以配置netfilter將數據包發送到用戶空間,並且ulogd守護程序可以save the packets to a file or database,因此可以配置或修改它以直接向您的程序發送數據包。

另一方面,如果您嘗試做一些聰明的插入來創建一個透明的VPN或類似的東西,ULOG可能會有點太多的工作。

相關問題