首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查与主机连接的Bash脚本:使用telnet和netcar的端口

检查与主机连接的Bash脚本:使用telnet和netcar的端口
EN

Stack Overflow用户
提问于 2022-08-19 11:19:46
回答 1查看 257关注 0票数 -2

我的任务是创建相当复杂的bash脚本,第一部分是检查与主机的连接:带有telnet的端口,如果telnet将失败或不会安装,请使用netcat尝试连接。

我对循环有问题,如果telnet连接到主机,它将跳过netcat,如果- telnet和netcat都失败,脚本将以错误消息结束。剧本:

代码语言:javascript
复制
#!/bin/bash
echo Type host IP address
read REMOTEHOST
echo Type port number
read REMOTEPORT
TIMEOUT=5

echo quit | timeout --signal=9 5 telnet $REMOTEHOST $REMOTEPORT


if nc -w $TIMEOUT -z $REMOTEHOST $REMOTEPORT; then
    echo "I was able to connect to ${REMOTEHOST}:${REMOTEPORT}"
else
    echo "Connection to ${REMOTEHOST}:${REMOTEPORT} failed. Exit code from Netcat was ($?)."
fi
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-19 12:48:28

你能用$吗?变量从最后一个命令中获取退出代码。

我发现您的原始telnet命令在我的系统中退出时带有错误代码1,因为转义字符是^]。当我手动telnet时,我需要按ctrl-]才能输入telnet提示符,然后输入‘退出’。

这里的诀窍是你不能只键入^],你必须输入ctrl-v ctrl-]

ctrl-v告诉系统捕获下一个ctrl字符。

下面给出的退出代码为0,您可以通过使用echo $手动运行它来验证吗?在命令行

-记得使用ctrl-v ctr]

代码语言:javascript
复制
$ (echo ^]; echo quit) | timeout --signal=9 5 telnet <REMOTEHOST> <REMOTEPORT>  
$ echo $?

然后,您可以在脚本中使用以下内容:

代码语言:javascript
复制
#!/bin/bash
echo Type host IP address
read REMOTEHOST
echo Type port number
read REMOTEPORT
TIMEOUT=5
    
(echo ^]; echo quit) | timeout --signal=9 5 telnet $REMOTEHOST $REMOTEPORT > /dev/null 2>&1    
TELNET_EXIT_CODE=$?
    
if [[ $TELNET_EXIT_CODE -ne 0 ]]; then
    nc -w $TIMEOUT -z $REMOTEHOST $REMOTEPORT > /dev/null 2>&1
    NC_EXIT_CODE=$?
fi

if [[ $TELNET_EXIT_CODE -eq 0 ]] || [[ $NC_EXIT_CODE -eq 0 ]]; then
    echo "success"
else
    echo "fail"
fi

在Ubuntu 20.04.04、GNU bash版本5.0.17、Telnet版本0.17-41上进行测试

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

https://stackoverflow.com/questions/73415995

复制
相关文章

相似问题

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