Bash脚本自动化Telnet

2022-10-15 13:29:46标签bashtelnet
提问

我试着用这个有效的命令来自动化telnet 但如果我把它放在一个脚本里,它就挂了,我不知道为什么。 最大的问题是数组dereference:使用$ { SERVERS[@]},没有引用,它将端口作为一个单独的主机名来处理。 其他注释: 全大写变量名称用于对shell或操作系统有意义的名称;其他名称保留用于应用程序(如您的脚本!),因此您应该在可能的情况下使用小写的名称。 foo & bar | | baz与if foo不相同;然后是baz;如果你想要的行为,如果你想要的行为,那么可靠的代码就可以使用。 使用grep -q导致grep不释放任何输出,因此不需要重定向输出。 echo -e是不可靠的:即使shell是100%肯定的,如果shell在运行时被编译或配置来提供一个xpg兼容的echo(可以通过环境变量来完成的配置)echo -e可以打印-e的输出,而不是将其作为参数来处理。 所有这些都考虑使用一个专用的端口扫描工具,如果这是针对任何类型的真实用例。这样的工具(nmap &c)可以并行地扫描大量的主机,而不需要为每个小的子进程运行一个子流程。 您可以尝试使用“/ dev / tcp”文件。

echo -e "\x1dclose\x0d" |
  telnet abc.gc.ca 100 |
  grep Connected>/dev/null && printf "PASSED\n" || printf "FAILED\n"

#!/bin/bash
SERVERS=(
   "abc.gc.ca 100"
   "defg.gc.ca 101"
   "123.gc.ca 102"
   "xyz.gc.ca 103"
)
for host in ${SERVERS[@]}; do
  echo -e "\x1dclose\x0d" |
    telnet $host |
    grep Connected > /dev/null && printf "PASSED\n" || printf "FAILED\n"
done
回答

#!/bin/bash
servers=(
   abc.gc.ca:100
   defg.gc.ca:101
   123.gc.ca:102
   xyz.gc.ca:103
)
for host_port in "${servers[@]}"; do
  host=${host_port%:*}   # put everything before the last : into host
  port=${host_port##*:}  # put everything after the last : into port
  if printf '\x1dclose\x0d' | telnet "$host" "$port" | grep -q Connected; then
    printf "PASSED\n"
  else
    printf "FAILED\n"
  fi
done

回答

SERVERS=(
   "abc.gc.ca/100"
   "defg.gc.ca/101"
   "123.gc.ca/102"
   "xyz.gc.ca/103"
)
for host in ${SERVERS[@]}; do
     timeout 3 bash -c "cat < /dev/null > /dev/tcp/$host" &&
         echo "PASSED" || echo "FAILED"
done

▼版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说cuoshuo.com——程序员的报错记录

部分内容根据CC版权协议转载,如果您希望取消转载请发送邮件到cuoshuo8@163.com

辽ICP备19011660号-5