我编写了以下脚本(它还不支持索引)。我遇到的问题是关于使用netcat加载页面。我可以使用命令行手动执行此操作,但是当我尝试让我的脚本发出完全相同的命令时,我可以在没有错误的情况下执行任何操作。我能想到的唯一可能的事情是我的输出是在其他地方吗?
#!/bin/bash
PORT=80
while [ true ]
do
echo "Type the address you wish to visit then, followed by [ENTER]:"
read address
path=${address#*/}
domain=${address%%/*}
nc $domain $PORT
printf "GET /$path HTTP/1.1\n"
printf "Host: $domain\n"
printf "\n"
printf "\n"
done
答案 0 :(得分:0)
您需要将请求标头传递给nc
的标准输入。
一种方法是输入重定向:
while true
do
echo "Type the address you wish to visit then, followed by [ENTER]:"
read address
path=${address#*/}
domain=${address%%/*}
nc $domain $PORT <<EOF
GET /$path
Host: $domain
EOF
done
答案 1 :(得分:0)
nc
的工作原理是将标准输入复制到给定地址:port,并将从那里读取的内容复制到标准输出。
{
printf "GET /%s HTTP/1.1\r\n" "$path"
printf "Host: %s\r\n" "$domain"
printf "\r\n"
printf "\r\n"
} | nc "$domain" "$port"
HTTP在每行末尾需要\r\n
。有些服务器只接受\n
,但有些服务器只遵守法律条文,只接受\r\n
指定的内容。
您需要将这些行发送到nc
的标准输入。
最好使用printf "Get %s HTTP/1.1\r\n" "$path" because
$ path may contain
%signs and that would confuse
printf`。