最近在工作中遇到了需要批量检测特定端口连通性的情况。本来想用nmap端口扫描检测,但一般来说,在没有经过同意的情况下执行端口扫描,是可以被视为网络攻击行为的。为了避免不必要的麻烦,也懒得找领导,所以自己编写了脚本用telnet测试。
这里可以准备两个文件:Start.sh、Script.exp
Start.sh #!/bin/bash while read ip //读取下面列表中IP地址 do `./script.exp $ip` //执行主要测试脚本 done << EOF 192.168.10.100 //这里是需要测试连通性的IP地址 192.168.10.112 //这里是需要测试连通性的IP地址 EOF Script.exp #!/usr/bin/expect set timeout 3 //设置超时时间为3秒 set host [lindex $argv 0] //host变量从start.sh中获取值 log_file $host.log //自动创建文件,记录执行过程与结果 spawn telnet $host 3389 //模拟手动执行命令”telnet 地址 端口” expect "*Escape character*" //检测输出中是否包含” Escape character”(连接成功会出现此消息) send "\1D\r quit\r" //若包含(即连接成功),则自动依次发送Ctrl+] 回车 quit 回车(退出telnet) //等待3秒后,无输出或输出没有包含关键字(即连接失败),则结束该IP测试在执行前需要下载expect工具:
yum install -y expect然后修改文件权限:
chmod 755 Start.sh Script.exp最后执行文件等待结果:
./Start.sh执行完成后,使用命令查看端口开放且可以连接的IP地址。
cat *.log|grep Connected或者使用命令将这些IP地址保存到文件中
cat *.log|grep Connected|cut -d " " -f 3 > ip.txt