当我运行此命令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表现得如此奇怪?
答案 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
来指定端口。