题
我试图玩弄netcat来了解更多关于如何HTTP的工作原理。我想脚本一些它在bash或Perl,但我已经在一个绊脚石早就在我的测试命中。
如果我在HEAD请求的提示和类型运行的netcat直的,它的工作原理和我接收标头我探测Web服务器。
此工作的:
[romandas@localhost ~]$ nc 10.1.1.2 80 HEAD / HTTP/1.0 HTTP/1.1 200 OK MIME-Version: 1.0 Server: Edited out Content-length: 0 Cache-Control: public Expires: Sat, 01 Jan 2050 18:00:00 GMT [romandas@localhost ~]$
但是,当我把同样的信息到一个文本文件,并将其提供给netcat的通过管道或通过重定向,在脚本编写,它不会返回头。点击 文本文件由HEAD请求和两个新行的:
HEAD / HTTP/1.0
经由发送相同的信息的回声强>或的printf 强>也不起作用。
$ printf "HEAD / HTTP/1.0\r\n"; |nc -n 10.1.1.2 80 $ /bin/echo -ne 'HEAD / HTTP/1.0\n\n' |nc 10.1.1.2 80
任何想法,我做错了什么?不知道这是一个bash的问题,回声等问题,或netcat的问题。
我经由Wireshark的检查的流量,并成功请求(手动键入)发送其后的换行符中的第二分组,而回波,printf的,和文本文件的方法保持在相同的分组中的换行,但我不确定是什么原因导致这种行为。
解决方案
您需要两批为“\ r \ n”,并且还告诉netcat来等待响应。 printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80
或类似应该工作。
其他提示
另一种方法是使用所谓的“定界符”公约。
$ nc -n -i 1 10.1.1.2 80 <<EOF
> HEAD / HTTP/1.0
>
> EOF
获得NC等待响应的另一种方法是向睡眠添加到输入端。 e.g。
(printf 'GET / HTTP/1.0\r\n\r\n'; sleep 1) | nc HOST 80
您可以使用下面的netcat命令,以使您的实例Web服务器:
MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&
此线也将作为等效的:
echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
不隶属于 StackOverflow