【问题标题】:Traffic forwarding流量转发
【发布时间】:2013-11-15 02:43:51
【问题描述】:
我有一个应用程序可以发送 HTTP GET 请求并从某个 Web 服务器接收答案。
是否可以完成以下操作:使用 Linux 命令(无代码)在端口 80 上在线读取传入数据并将其转发到多播组或任何 upd 端口。试着用nc做,没有成功。
我知道它可以在应用程序级别轻松完成,我试图避免将数据提升到应用程序级别然后将其放到线路上的不必要延迟。时间在这里非常关键。
谢谢大家。
【问题讨论】:
标签:
linux
bash
http
tcp
multicast
【解决方案1】:
您可以使用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 不太可能比内核做得更好。