2013-11-04 40 views
0

我有一個應用程序發送HTTP GET請求並從某些Web服務器接收答案。 是否可以完成以下操作:使用Linux命令(無代碼)在端口80上在線讀取傳入數據,並將其轉發給多播組或任何upd端口。試圖用NC來做,沒有成功。 我知道它可以很容易地在應用程序級別上完成,我試圖避免在將數據提升到應用程序級別然後將其降低到線路上的不必要的延遲。這裏的時間非常關鍵。 謝謝大家。流量轉發

+0

相關:http://superuser.com/questions/308221/how-to-make-tcpdump-or-other-tool-to-actually-dump-tcp-stream –

回答

0

您可以使用tcpflow來捕獲TCP流中的實際數據。例如,我可以開始:

sudo tcpflow -C -v -i eth0 "tcp src port 80" 

再比如說,如果我在另一個窗口中運行curl google.com,然後tcpflow轉儲TCP流。

然後,您可以將此輸出傳送到socat以將其發送到UDP套接字。

UDP監聽:

socat -u UDP-RECV:5555 STDOUT 

tcpflow輸出到這個UPD聽衆:

sudo tcpflow -C -v -i eth0 "tcp src port 80" | socat STDIN UDP-SENDTO:localhost:5555 

記住,TCP和UDP是完全不同的協議,因而有相當不同的使用情況。 TCP是面向流的,而UDP是面向數據報的。試圖通過面向數據報的套接字填充流將充其量不可靠。

此外,雖然您可能能夠獲得上述工作,但我不確定您會看到多少性能增益。不管發生了什麼,TCP流重組必須發生,內核通常會非常有效地做到這一點。不太可能tcpflow會比內核做得更好。