用telnet命令做不了自动,因为如果成功telnet了,telnet就控制输入了。
其实,不用那么麻烦,您下载一个微软官方的扫描器叫portqry,用一句for读取您文件里的ip和port,执行就行了。
假设您的文件叫list.txt,里面是ip port的格式,就这么写:
@echo off
@setlocal enabledelayedexpansion
@if exist notopen.log del /f /q notopen.log
@if exist open.log del /f /q open.log
@for /f "tokens=1,2* delims= " %%i in (list.txt) do(
@portqry -n %%i -e %%j|find "NOT" >nul
@if %errorlevel%==0 (
@echo %%i:%%j not open >>notopen.log
) else (
@echo %%i:%%j is open >>open.log
)
)
把上面的批处理存为myscan.bat,和您的列表文件,以及portqry工具放在一个文件夹里就行了。运行批处理后,通的存到open.log,不通的存到notopen.log。
追问:
非常感谢, 我测试了您的方法结果,结果是一闪黑框就没了.也没有产生open.log和notopen.log这两个文件,是不是我哪里写错了.最大的可能 是不是我在list.txt中的IP格式不对。我写的是
172.27.193.1 2000
172.27.193.2 2000
172.27.193.3 2000
这样的格式.对不对.如果不对应该写什么样的IP格式?
追答:
不是您的格式不对,是我马虎了,抱歉。给您从发一段,这段是在XP下实际测试后的。
@echo off
@setlocal enabledelayedexpansion
@if exist notopen.log del /f /q notopen.log
@if exist open.log del /f /q open.log
@for /f "tokens=1,2* delims= " %%i in (list.txt) do (
@portqry -n %%i -e %%j|find ": LISTENING" >nul
@if !errorlevel!==0 (
@echo %%i:%%j >>open.log
) else (
@echo %%i:%%j >>notopen.log
)
)
您再试一下。不过当地址端口不通时,我的机器每个地址大约有60秒超时间隔,所以如果,有很多机器没开机的话,效率不是太高。
有个解决办法,就是先用for循环ping一遍,ping通了的再进行该扫描,我也给您简单写了个批处理,就叫myping.bat吧。
@echo off
@setlocal enabledelayedexpansion
@if exist ping_ok.txt del /f /q ping_ok.txt
@for /f "tokens=1,2* delims= " %%i in (list.txt) do (
@ping -n 1 %%i|find "TTL=" >nul
@if !errorlevel!==0 @echo %%i %%j >>ping_ok.txt
)
这个执行完后,会生成ping_ok.txt,把第一段批处理里的list.txt换成这个ping_ok.txt就行了。该解决方案的问题是,如果您的客户端有防火墙、或网络丢包率高,那ping不成功就有可能是假象了,您就别用该方案了。