【问题标题】:Linux script telnet HEAD request [duplicate]Linux脚本telnet HEAD请求[重复]
【发布时间】:2023-04-09 21:42:01
【问题描述】:

所以基本上我正在尝试做一些相当简单的事情;我正在尝试制作一个脚本来远程登录到微软服务器并请求页面的 HEAD。但正如预期的那样,它不起作用。如果我只是手动将它输入到控制台中它可以工作,但是在执行脚本时根本不起作用。

这是我制作的脚本:

回显“telnet $1 $2”
睡觉 10
echo "HEAD $3 HTTP/1.0"
回声
回声
睡觉2

在控制台中输入:

./gethost microsoft.com 80 /

结果如下:

telnet microsoft.com 80
HEAD / HTTP/1.0


然后在最后两个空回声后返回控制台,老实说,我不明白,我什至增加了睡眠(可能的网络延迟)。

【问题讨论】:

  • echo 只是打印。要运行telnet,您可以省略echo,但是还有其他问题。您可能会发现this answer 很有用。
  • 我找到了解决方案,我改变了整个事情看起来像这样 (echo -en "HEAD / HTTP/1.1\n"; echo -en "Host: microsoft.com \n\n" ; 睡觉 1) | telnet microsoft.com 80

标签: linux bash telnet


【解决方案1】:

您的脚本只是将一些内容打印到标准输出。它实际上并不执行telnet 命令。试试这样的:

telnet $1 $2 <<< $'HEAD $3 HTTP/1.0\r\n\r\n'

这将运行telnet 而不仅仅是打印命令。它还输入标准输入上的HEAD 命令。发送\r\n 行结尾而不是UNIX 的默认\n 行结尾很重要,因为\r\n 是HTTP 协议所要求的。

有关&lt;&lt;&lt; 运算符的说明,请参阅man bash

【讨论】:

  • 它现在打开了telnet连接,但不是最终的错误消息是:“连接被外国主机关闭”。
【解决方案2】:

您实际上并没有在任何地方运行 telnet 命令。您只需将其回显到屏幕上即可。

从该行删除回声。

话虽这么说也行不通,因为您不会以这种方式在脚本中获得交互式 telnet 会话。

您也许可以将输入通过管道传输到 telnet 以将其字符串发送到删除主机,但我不确定。

您可以为此使用netcat/nc 之类的东西而不是telnet(这可能是个好主意),因为它们绝对可以通过管道获取输入。

您也可以只使用为此构建的工具,例如 curl (curl -I)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 2011-12-03
    • 2020-04-02
    • 2011-12-11
    • 2012-08-29
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多