使用netcat(nc)作为HTTP代理服务器和监视器

时间:2010-10-29 16:25:39

标签: linux http bash unix tcp

是否可以使用Unix netcat(nc)程序创建TCP代理服务器和监视器?我希望所有TCP流量都通过管道传递,并发送到stdout进行监控。请注意,这将用于监视硬件设备和HTTP服务器之间的HTTP流量。

5 个答案:

答案 0 :(得分:16)

昨天有需要。你可以在这里找到答案(法语):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文件中。连接所需的命名管道为bi -directional。

答案 1 :(得分:3)

不是netcat本身,因为它必须解释HTTP请求并传递它。例如,通过代理的HTTP请求以:

开头

获取http://www.example.org/ HTTP / 1.1

你的代理必须去,'好吧,我必须连接到example.org和GET /'。

现在可以通过将nc输出管道传输到一个脚本来完成,该脚本解析HTTP req,然后调用'wget'来获取页面,然后通过netcat重新悄悄地...哎呀,为什么?

Apache,或者鱿鱼可能会完成这项工作。

答案 2 :(得分:0)

当然,你可以使用它或faucet|hose对,但是为什么这样做,当你可以拥有一个最小的Apache实例做同样的事情并提供更多的功能全套分析?

答案 3 :(得分:0)

是的,应该可以。

当我[询问有关在新闻组中使用bash 1编写网络服务器时,我最终得到了两个不错的想法。一种是使用xinetd作为实际服务器,并让它为每个连接运行一个shell脚本;在你的情况下,脚本然后可以使用tee和nc转发和记录连接(用一些文件描述符技巧来获得每个流上的tee,我认为)。另一个是使用socat,它有效地让你用bash写一个完全可操作的服务器,带有监听套接字和处理程序子进程;再次,你会希望tee和netcat进行日志记录和代理。

如果你想要一个合适的代理服务器,而不是像@Spacedman所说,你需要解释请求行,但这很容易 - 阅读第一行,应用cut -d ' ' -f 2获取URL,一些sed或shell字符串运算符拉出域和端口,并继续。但是,如果您事先知道所有流量都将转移到一个端点,那么您可以将其硬连线。

答案 4 :(得分:0)

设置它以使其正常工作会很棘手。一个更好的解决方案是使用适当的代理(例如鱿鱼)或只是嗅探流量(wireshark,pastmon)。