我试图玩弄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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top