ncat:管道多行请求中断 HTTP
ncat: piping multiline request breaks HTTP
我刚开始使用 ncat,并尝试处理简单的 HTTP 请求,我遇到了以下问题:
启动 ncat 并输入一个两行的获取请求工作正常:
$ ncat 192.168.56.20 80
GET / HTTP/1.1
Host: 192.168.56.20
HTTP/1.1 200 OK
但是,如果请求被回显到 ncat,它显然会在某处中断:
$ echo 'GET / HTTP/1.1\nHost: 192.168.56.20' | ncat 192.168.56.20 80
HTTP/1.1 400 Bad Request
我不明白。
字符串中的\n
按字面意思发送。使用 echo -e
启用对反斜杠转义的解释。此外,the newline sequence for HTTP 1.1 is \r\n
(CRLF). 和 header 部分以附加的 end-of-line.
结尾
尝试:
echo -e 'GET / HTTP/1.1\r\nHost: 192.168.56.20\r\n\r\n' | ncat 192.168.56.20 80
或者,the ncat has the option 将新行转换为 CRLF:
-C, --crlf Use CRLF for EOL sequence
因此,你可以这样写:
echo -e 'GET / HTTP/1.1\nHost: 192.168.56.20\n\n' | ncat -C 192.168.56.20 80
你应该得到相同的结果。
我刚开始使用 ncat,并尝试处理简单的 HTTP 请求,我遇到了以下问题:
启动 ncat 并输入一个两行的获取请求工作正常:
$ ncat 192.168.56.20 80
GET / HTTP/1.1
Host: 192.168.56.20
HTTP/1.1 200 OK
但是,如果请求被回显到 ncat,它显然会在某处中断:
$ echo 'GET / HTTP/1.1\nHost: 192.168.56.20' | ncat 192.168.56.20 80
HTTP/1.1 400 Bad Request
我不明白。
字符串中的\n
按字面意思发送。使用 echo -e
启用对反斜杠转义的解释。此外,the newline sequence for HTTP 1.1 is \r\n
(CRLF). 和 header 部分以附加的 end-of-line.
尝试:
echo -e 'GET / HTTP/1.1\r\nHost: 192.168.56.20\r\n\r\n' | ncat 192.168.56.20 80
或者,the ncat has the option 将新行转换为 CRLF:
-C, --crlf Use CRLF for EOL sequence
因此,你可以这样写:
echo -e 'GET / HTTP/1.1\nHost: 192.168.56.20\n\n' | ncat -C 192.168.56.20 80
你应该得到相同的结果。