首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从bash捕获telnet超时

从bash捕获telnet超时
EN

Stack Overflow用户
提问于 2018-02-02 16:31:42
回答 2查看 1.2K关注 0票数 2

引用此问题:automating telnet session using bash scripts

我正在尝试捕获远程主机超时所需的时间。假设是10秒。我可以手动启动time telnet host port,输入一些命令,然后什么也不做,10秒后,time的输出将包含我所需的时间。

然而,在脚本中,问题是使用以下解决方案:

代码语言:javascript
复制
{ echo "command"; } | time telnet host port

当管道结束时,它会发送EOF并立即关闭telnet。我可以通过添加一个sleep n作为我的最后一个管道命令来解决这个问题,但是由于超时(可能超过实际的服务器超时),所有的东西都挂起了。

只是为了解释一下我正在尝试做什么,让我们借用Google的帮助。我希望我的时间输出是5分钟,这似乎是谷歌使用的超时。而是:

代码语言:javascript
复制
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; } | time telnet www.google.com 80 2>&1

给出0 -错误(立即发送EOF)

代码语言:javascript
复制
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; sleep 10; } | time telnet www.google.com 80 2>&1

给出10 -错误

代码语言:javascript
复制
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; sleep 1; } | time telnet www.google.com 80 2>&1

给出1 -错误

代码语言:javascript
复制
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; sleep 900; } | time telnet www.google.com 80 2>&1

给出900 -错误(在这里,我期望远程登录停止,因为远程主机发送了一个kill,但是睡眠成功了)

那么,我该如何解决这个问题呢?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-02 19:25:50

尽管我不太喜欢它,但这似乎是有效的:

代码语言:javascript
复制
( time { echo "set timeout 400"; echo "spawn telnet www.google.com 80"; 
         echo 'send "GET / HTTP/1.1\r"'; echo "send \"Host: www.google.com\r\""; 
         echo 'send "Connection: keep-alive\r"'; echo 'send "\r"'; 
         echo "expect { eof exit timeout exit }"; } | expect ) 2>&1

上面的代码同时输出HTTP头/正文和时间结果,因此两者都是可以操作的。

顺便说一句,上面的方法适用于HTTP。对于HTTPS,您必须使用openssl,但相同的系统也可以工作。

票数 2
EN

Stack Overflow用户

发布于 2018-02-02 16:41:00

telnet旨在用于交互式使用。我推荐使用netcat

代码语言:javascript
复制
time netcat -q-1 www.google.com 80 <<EOF
GET / HTTP/1.1
Connection: keep-alive
Host: www.google.com


EOF

或者,如果您的脚本在bash中运行,则可以使用/dev/tcp

代码语言:javascript
复制
#!/bin/bash
host="www.google.com"
port=80    
time {
    exec 3<>"/dev/tcp/${host}/${port}"
    cat <<EOF - >&3
GET / HTTP/1.1 
Host: ${host}
Connection: keep-alive


EOF
    cat <&3
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48578664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档