我正在尝试使用 netcat 来了解有关 HTTP 工作原理的更多信息。我想用 bash 或 Perl 编写其中的一些脚本,但我在测试的早期就遇到了一个绊脚石。
如果我直接从提示符运行 netcat 并输入 HEAD 请求,它会起作用,并且我会收到我正在探测的 Web 服务器的标头。
这有效:
[romandas@localhost ~]$ nc 10.1.1.2 80 头/HTTP/1.0 HTTP/1.1 200 正常 MIME 版本:1.0 服务器:已编辑 内容长度:0 缓存控制:公共 过期:2050 年 1 月 1 日星期六 18:00:00 GMT [romandas@localhost ~]$
但是,当我将相同的信息放入文本文件并通过管道或重定向将其提供给 netcat 以准备编写脚本时,它不会返回标头。
文本文件由 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 和文本文件方法将换行符保留在同一个数据包中,但我不确定是什么原因这种行为。