0

我有一个应用程序发送 HTTP GET 请求并从某个 Web 服务器接收答案。是否可以完成以下操作:使用 Linux 命令(无代码)在端口 80 上在线读取传入数据并将其转发到多播组或任何 upd 端口。试着用nc做,没有成功。我知道它可以在应用程序级别轻松完成,我试图避免在将数据提升到应用程序级别然后将其放到线路上时出现不必要的延迟。时间在这里非常关键。谢谢大家。

4

1 回答 1

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比内核做得更好。

于 2013-11-04T19:34:24.427 回答