【发布时间】:2011-05-02 12:26:15
【问题描述】:
是否可以使用 Unix netcat (nc) 程序来创建 TCP 代理服务器并进行监控?我希望所有 TCP 流量都通过管道传递,并发送到标准输出进行监控。请注意,这将用于监控硬件设备和 HTTP 服务器之间的 HTTP 流量。
【问题讨论】:
是否可以使用 Unix netcat (nc) 程序来创建 TCP 代理服务器并进行监控?我希望所有 TCP 流量都通过管道传递,并发送到标准输出进行监控。请注意,这将用于监控硬件设备和 HTTP 服务器之间的 HTTP 流量。
【问题讨论】:
昨天刚有需要。你可以在这里找到答案(法语):http://www.linux-france.org/~mdecore/linux/doc/memo2/node168.html
mknod backpipe p
nc -l -p 80 < backpipe | tee -a in | nc localhost 8080 | tee -a out.html > backpipe
这在端口 80 上侦听并在端口 8080 上重定向。传入流量将出现在 in 文件中,传出流量将出现在 out.html 文件中。命名管道是双向连接所必需的。
【讨论】:
nc -l localhost 8080 < backpipe | tee -a in | nc stackoverflow.com 80 | tee -a out.html > backpipe 进行了测试,然后在localhost:8080 打开一个选项卡工作正常,只是stackexchange 的虚拟主机处理部分感到困惑并且不知道该怎么做。
不是 netcat 本身,因为它必须解释 HTTP 请求并传递它。例如,通过代理的 HTTP 请求以:
GET http://www.example.org/HTTP/1.1
然后你的代理必须去,'好的,我必须连接到 example.org 和 GET /'。
现在这可以通过将 nc 输出通过管道传输到解析 HTTP 请求的脚本中来完成,然后调用“wget”来获取页面,然后通过 netcat 将其返回...哦,哎呀,为什么?
Apache 或 squid 可能可以完成这项工作。
【讨论】:
当然,您可以使用它或 faucet|hose 对,但是当您可以让一个最小的 Apache 实例做完全相同的事情并提供更完整的分析集时,为什么要这样做?
【讨论】:
是的,应该可以的。
当我 [询问关于在新闻组中使用 bash1 编写 Web 服务器的问题时,我得到了两个不错的想法。一种是使用 xinetd 作为实际服务器,并让它为每个连接运行一个 shell 脚本;在您的情况下,脚本然后可以使用 tee 和 nc 来转发和记录连接(我认为使用一些文件描述符技巧来获取每个流的 tee)。另一种是使用 socat,它可以有效地让您在 bash 中编写一个完全可操作的服务器,带有监听套接字和处理程序子进程;同样,您希望 tee 和 netcat 进行日志记录和代理。
如果你想要一个合适的代理服务器,正如@Spacedman 所说,你需要解释请求行,但这很容易 - 阅读第一行,应用 cut -d ' ' -f 2 获取 URL,一些 sed 或 shell字符串操作符拉出域和端口,然后继续。但是,如果您事先知道所有流量都流向一个端点,那么您可以硬连线它。
【讨论】:
设置起来会很棘手,因此它可以正常工作。更好的解决方案是使用适当的代理(例如 squid)或只是嗅探流量(wireshark、pastmon)。
【讨论】: