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