[英]Scripting an HTTP header request with netcat
我正在嘗試使用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問題,回聲問題還是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 <<EOF
> HEAD / HTTP/1.0
>
> EOF
讓nc等待響應的另一種方法是向輸入添加休眠。 例如
(printf 'GET / HTTP/1.0\r\n\r\n'; sleep 1) | nc HOST 80
您可以使用下面的netcat命令來創建您的實例webserver:
MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&
這一行也可以作為等價物:
echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.