所以基本上我试图做一些相当容易的事情;我试图制作一个脚本telnet到微软服务器并请求页面的HEAD。但正如预期的那样,它不起作用。如果我只是手动将它输入控制台就行了,但是当执行脚本时根本不起作用。
这是我制作的剧本:
回声" telnet $ 1 $ 2"
睡10年 echo" HEAD $ 3 HTTP / 1.0"
回声
回声
睡2个。
在控制台中输入:
./ gethost microsoft.com 80 /
结果这样:
telnet microsoft.com 80
HEAD / HTTP / 1.0
然后在最后两个空回声之后返回控制台,老实说,我没有得到它,我甚至增加了睡眠(可能的网络延迟)。
答案 0 :(得分:1)
你的脚本只是打印一些东西到stdout。它实际上并没有执行telnet
命令。尝试这样的事情:
telnet $1 $2 <<< $'HEAD $3 HTTP/1.0\r\n\r\n'
这将运行telnet
而不是仅仅打印命令。它还在stdin上输入HEAD
命令。发送\r\n
行结尾而不是UNIX的默认\n
行结尾非常重要,因为\r\n
是HTTP协议所需要的。
有关man bash
运算符的说明,请参阅<<<
。
答案 1 :(得分:0)
您实际上并未在任何地方运行 telnet命令。你只需将它回显到屏幕上。
从该行中删除回声。
据说这样做不会因为你没有以这种方式在脚本中获得交互式telnet会话。
您可以将输入传输到telnet
,以便将字符串发送到删除主机,但我不确定。
你可以使用netcat
/ nc
代替telnet
这样的东西(这可能是一个好主意)因为它们肯定可以通过管道输入。
您也可以使用为此构建的工具,例如curl
(curl -I
)。