我正在尝试使用netcat来了解有关HTTP如何工作的更多信息.我想用bash或Perl编写一些脚本,但是在测试的早期我遇到了一个绊脚石.
如果我直接从提示符运行netcat并输入HEAD请求,它会工作,我收到我正在探测的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
通过echo或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问题,echo问题或netcat问题.
我通过Wireshark检查了流量,成功请求(手动输入)在第二个数据包中发送尾随换行符,而echo,printf和text文件方法将换行符保留在同一个数据包中,但我不确定是什么原因造成的这种行为.
你需要两个"\ r \n",并告诉netcat等待响应.printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80
或类似的应该工作.
另一种方法是使用所谓的'heredoc'约定.
$ nc -n -i 1 10.1.1.2 80 <HEAD / HTTP/1.0 > > EOF