shell脚本利用telnet命令批量测试IP和端口的连通性

IP和端用写在一个文件里面,每行一个IP+端口,中间和冒号分隔,如下的方式:

192.168.1.1:80

192.168.1.2:8080

......

脚本如下:

#!/bin/bash

telnets()
{
results=`(sleep 1;) | telnet $1 $2|grep "]"|wc -l`
  if [ $results -eq 0 ]
  then
    echo "$1 $2 不通" >>/tmp/porttests.txt

  else
    echo "$1 $2 通" >>/tmp/porttests.txt
  fi
}


OLD_IFS="$IFS"
IFS=":"
while read LINE
do
  echo $LINE
  array=($LINE)
  ips=${array[0]}
  ports=${array[1]}
  telnets $ips $ports
done </tmp/ipsports.txt.bak
IFS="$OLD_IFS"

Shell脚本中,可借助`telnet`命令对多个IP端口连通性进行批量测试。以下是几种不同的编写方法: ### 方法一 ```bash cat iplist.txt | while read -r line do ip=`echo $line | awk '{print $1}'` port=`echo $line | awk '{print $2}'` timeout_second=5 result=`echo -e "\n" | timeout --signal=9 $timeout_second telnet $ip $port 2>/dev/null | grep Connected | wc -l` if [ $result -eq 1 ]; then echo "YES: $line" else echo "NO: $line" fi done ``` 此脚本会读取`iplist.txt`文件,该文件每行需包含IP地址端口号,用空格分隔。脚本会对每个IP端口进行测试,超时时间设为5秒,根据结果输出`YES`或`NO` [^2]。 ### 方法二 ```bash ipfile=$1 curpath=$(readlink -f "$(dirname "$0")") lines=($(cat $curpath'/'$ipfile)) len=${#lines[@]} for ((i=0; i<len; i++)) do line=${lines[$i]} array=(${line//:/ }) ip=${array[0]} port=${array[1]} sh telnet_one.sh $ip $port done ``` 该脚本接收一个文件名作为参数,读取文件中的每行内容(IP端口用冒号分隔),并调用`telnet_one.sh`脚本对每个IP端口进行测试 [^3]。 ### 方法三 ```bash #!/bin/bash check_telnet(){ for ip_port in $(cat ip_info|grep -v '^#') do CHECK_PORT=$(echo $ip_port|awk -F: '{print $2}') CHECK_IP=$(echo $ip_port|awk -F: '{print $1}') echo -e "\n"| telnet $CHECK_IP $CHECK_PORT |grep "Connected to\|Escape character" >/dev/null if [ $? -eq 0 ];then echo "$LOCALIP result $CHECK_IP $CHECK_PORT connected" else echo "$LOCALIP result $CHECK_IP $CHECK_PORT can not Connected" fi done } check_telnet >result.log ``` 此脚本会读取`ip_info`文件,该文件每行需包含IP地址端口号,用冒号分隔。脚本会对每个IP端口进行测试,结果会输出到`result.log`文件中 [^4]。 ### 方法四 ```bash #!/bin/bash telnets() { results=`(sleep 1;) | telnet $1 $2|grep "]"|wc -l` if [ $results -eq 0 ] then echo "$1 $2 不通" >>/tmp/porttests.txt else echo "$1 $2 通" >>/tmp/porttests.txt fi } OLD_IFS="$IFS" IFS=":" while read LINE do echo $LINE array=($LINE) ips=${array[0]} ports=${array[1]} telnets $ips $ports done </tmp/ipsports.txt.bak IFS="$OLD_IFS" ``` 该脚本会读取`/tmp/ipsports.txt.bak`文件,该文件每行需包含IP地址端口号,用冒号分隔。脚本会对每个IP端口进行测试,结果会输出到`/tmp/porttests.txt`文件中 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值