我有一个发送HTTP GET请求并从某些Web服务器接收答案的应用程序。
是否可以完成以下操作:使用Linux命令(无代码)在线读取端口80上的传入数据,并将其转发到多播组或仅更新的任何端口。试图用nc做,没有成功。
我知道这可以在应用程序级别轻松完成,我试图避免在将数据提升到应用程序级别然后将其传递给网络时不必要的延迟。时间在这里非常关键。
谢谢大家
最佳答案
您可以使用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
不可能比内核做得更好。