linux - 流量转发

标签 linux bash http tcp multicast

我有一个应用程序,可以发送 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/

相关文章:

python - raw_input 识别 ^?但不是^H

linux - 如何删除 BASH 中的一行?

linux - 发送电子邮件 : Linux Script and Array

Python urllib2 与保持事件

call_usermodehelper/call_usermodehelperpipe 用法

c - 在 C 程序上执行 shell 命令并读取其输出

http - 多个 HTTP 授权 header ?

android - 列出来自 Android 手机的 HTTP 请求

bash - 应为条件二元运算符 : syntax error near `$1'

python - 如何使用 bash 命令 'read -e variable' 并将变量传递给 python 变量