我正在尝试使用 netcat 来了解有关 HTTP 工作原理的更多信息。我想用 bash 或 Perl 编写其中的一些脚本,但我在测试的早期遇到了一个绊脚石。
如果我直接从提示符中运行 netcat 并输入 HEAD 请求,它会工作并且我会收到我正在探测的 Web 服务器的 header 。
这个有效:
[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 以准备编写脚本时,它不会返回 header 。
文本文件由 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 和文本文件方法将换行符保存在同一个数据包中,但我没有确定是什么导致了这种行为。
最佳答案
你需要两对“\r\n”,还要告诉netcat
等待响应。
以下或类似的东西应该有效:
printf "HEAD / HTTP/1.0\r\n\r\n" | nc -n -i 1 10.1.1.2 80
关于bash - 使用 netcat 编写 HTTP header 请求脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/642707/