在CTRL-C连接后,Netcat只发送答案

时间:2016-02-25 18:15:53

标签: linux debian netcat

当我运行此命令cat index.html | nc -lnvp 2222然后使用此标头在浏览器中打开服务器的本地地址时: GET / HTTP/1.1 Host: 192.168.146.131:2222 User-Agent: "my user agent here" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive

这是index.html:hi whats up(就是这样)

我在运行netcat的终端中获取了http请求,而我的其他计算机上的浏览器正在等待。只有当我按CTRL-C终端上的连接时,我才能在浏览器中得到响应。

我的uname -a打印出来:Linux kali 4.0.0-kali1-amd64 #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) x86_64 GNU/Linux

当我尝试使用cat index.html | nc -l 2222时,它根本不起作用。我的Kali机器甚至没有得到http请求。当我在Ubuntu机器上尝试相同时,它就像我想要它一样工作:它只是将index.html发送到浏览器而无需等待我使用CTRL-C netcat。

任何人都知道为什么netcat表现得如此奇怪?

2 个答案:

答案 0 :(得分:3)

有两种不同的netcat,您正在使用其中一种:

  • 传统netcat默认会避免关闭连接,因为客户端可能会发送更多数据。

  • 当没有更多数据要发送时,OpenBSD netcat默认关闭连接。

旧版本的HTTP(就像你正在重新开始)希望关闭连接,因此它默认使用OpenBSD netcat。

您可以使用传统的netcat关闭eof上的连接,使用-q 0

stuff | nc.traditional -l -p 2222 -q 0

答案 1 :(得分:1)

man nc写道:

" netcat一直运行,直到网络端关闭"所以你的浏览器将永远等待数据完成。使用-q选项退出,再次查看手册页:"在stdin上执行EOF后,等待指定的秒数,然后退出"。

cat index.html | nc -lnvp 2222 -q 0

nc -l 2222没有意义,您需要使用-p来指定端口。