我有一个应用程序,可以发送 HTTP GET 请求并从某个 Web 服务器接收答案。 是否可以完成以下任务:使用 Linux 命令(无代码)读取端口 80 上的传入数据,并将其转发到多播组或任何 upd 端口。尝试用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 是完全不同的协议(protocol),因此具有完全不同的用例。 TCP是面向流的,而UDP是面向数据报的。尝试通过面向数据报的套接字填充流最多是不可靠的。
此外,虽然您可能能够使上述内容发挥作用,但我不确定您实际上会看到多少性能提升。无论发生什么,TCP 流重组必须发生,并且内核通常会非常有效地完成此操作。 tcpflow
不太可能比内核做得更好。
关于linux - 流量转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19768436/