我想通过使用netcat来学习HTTP的工作原理。我想在bash或Perl中编写一些脚本,但是在测试的早期阶段就遇到了一个问题。
如果我直接从提示符运行netcat并输入HEAD请求,则可以正常工作,并收到我正在探测的Web服务器的标头。
这个命令有效:
文本文件包含HEAD请求和两个换行符:
我通过Wireshark检查了流量,并且成功请求(手动键入)在第二个数据包中发送尾随换行符,而echo、printf和文本文件方法将换行符保留在同一个数据包中,但我不确定是什么导致了这种行为。
如果我直接从提示符运行netcat并输入HEAD请求,则可以正常工作,并收到我正在探测的Web服务器的标头。
这个命令有效:
[romandas@localhost ~]$ nc 10.1.1.2 80 HEAD / HTTP/1.0但是,当我将相同的信息放入文本文件中并通过管道或重定向将其馈送给netcat以准备编写脚本时,它不返回标头。
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 ~]$
文本文件包含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和文本文件方法将换行符保留在同一个数据包中,但我不确定是什么导致了这种行为。