Shell脚本 - telnet多个主机:端口

时间:2015-04-01 13:49:42

标签: bash shell testing sh telnet

我绝不是shell脚本的专家。 我从另一篇文章(Bash script telnet to test multiple addresses and ports)得到了结构构思 我需要通过telnet验证特定主机和端口之间的LAN连接。

使用telnet的原因是局域网和机器都非常安全,我无法访问netcat,nmap或/ dev / tcp。我也没有接近Python或Pearl的方法来尝试这条路线......(我知道愚蠢的我,但我会到达那里:P)。

以下代码有效,但由于我理解的原因,while循环只迭代一次而不再...... :(。

注意:重要的是要知道连接是否由于超时而失败或被拒绝(端口在端点处关闭)。

任何人都可以帮助我1)修复它并且2)理解为什么?

仅供参考:对于其他可能有类似需求的人来说,这是脚本完全可操作的更新代码。      在这种情况下,连接被拒绝被视为成功(测试防火墙规则),根据需要可以将其更改为失败。

    #!/bin/bash
    path=`pwd`;
    touch $path/test_telnet.out || exit;
    touch $path/success.log || exit;
    touch $path/failed.log || exit;
    echo "10.192.168.1 1200
    10.10.10.2 80
    10.220.2.8 6090
    10.220.2.9 6090" | ( while read host port; do
        telnet $host $port </dev/null > $path/test_telnet.out 2>&1 & sleep 1; kill $!;
        if grep Connected $path/test_telnet.out >/dev/null;
            then
                echo @ $(date +"%b %d %H:%M %Y") $host:$port [ OPEN ] | tee -a $path/success_log.txt;
            elif grep refused $path/telnet_test.txt >/dev/null; then
                echo @ $(date +"%b %d %H:%M %Y") $host:$port [ REFUSED ] | tee -a $path/success_log.txt;
            else
                echo @ $(date +"%b %d %H:%M %Y") $host:$port [ TIMEOUT ] | tee -a $path/failed_log.txt;
        fi;
    cp /dev/null $path/test_telnet.out;
    done
    ) 2>/dev/null #avoid bash messages

2 个答案:

答案 0 :(得分:1)

正如Etan评论的那样,telnet正在吃其余的输入。修复方法是重定向telnet的输入。

改变这个:

telnet $host $port > ~/test_con/telnet_test.txt

到此:

telnet $host $port </dev/null > ~/test_con/telnet_test.txt

答案 1 :(得分:0)

我添加了一个shell脚本文件,然后运行它。该脚本从下面的列表中获取服务器和端口。

for i in {10.21.xxx.yyy,10.21.xxx.yyy,10.23.xxx.yyy};
do
        for j in {5501,5502,5503,5504,7701,7702,7703,7704,5551,5552,5553,7771,7772,7773};
        do
                (echo > /dev/tcp/${i}/${j}) > /dev/null 2>&1 && echo "${i}:${j} :: it's getting connected" || echo "${i}:${j} :: it's not connecting"
        done
done