使用批处理脚本在Windows 7上自动执行Telnet端口testing

我正在使用Windows 7 x64。 使用bat脚本,我需要检查是否能够使用telnet连接到服务器上的某些特定端口。 如果连接成功,服务器将显示一个菜单,或者显示如下信息:Connecting To xxxxx …无法打开与主机的连接,端口xxxxx:连接失败。

对于我的目的,服务器有几个端口进行testing,我不想通过login或导航菜单复杂的事情。 我只想要一个简单的输出,指出连接是否成功。 检查退出状态不起作用。 我不想使用Visual Basic。 任何想法如何使用蝙蝠脚本检查连接状态? 目前我检查视觉,我使用下面的脚本来打开连接

@ECHO OFF setlocal EnableDelayedExpansion echo. SET /P host_name="Please enter the hostname: " echo Please enter the port numbers followed by the Enter key: echo. set num=0 :Loop set /a num=num+1 SET /P mwa_port%num%="" if "!mwa_port%num%!"=="" (goto Start) goto Loop :Start set /a num=num-1 for /L %%i in (1,1,%num%) do ( echo Trying to log into port !mwa_port%%i! of %host_name% start /min "" "C:\Windows\System32\telnet.exe" %host_name% !mwa_port%%i! REM echo Exit Code is %errorlevel% ) :End endlocal echo. SET /P leave="Press any key to exit.." 

这里是脚本的输出示例:

 Please enter the hostname : abcdefg.hijkl.mnop Please enter the port numbers followed by the Enter key: 10001 10002 10003 10004 10005 Trying to log into port 10001 of abcdefg.hijkl.mnop Trying to log into port 10002 of abcdefg.hijkl.mnop Trying to log into port 10003 of abcdefg.hijkl.mnop Trying to log into port 10004 of abcdefg.hijkl.mnop Trying to log into port 10005 of abcdefg.hijkl.mnop Press any key to exit.. 

然后以最小化的状态打开5个telnet窗口,每个窗口都有成功login的菜单

Solutions Collecting From Web of "使用批处理脚本在Windows 7上自动执行Telnet端口testing"

这是一个耻辱,你不能使用netcat – 所有的开源选项,如它在你的环境中禁止?

即使没有开源工具,您仍然可以使用PowerShell完成此任务。

以下是一个PS脚本示例,它将尝试连接到$ remoteHost上的端口23,并在成功时退出0,失败时返回1。 (如果连接后需要做更多的工作,可以在Web上使用更复杂的PowerShell远程登录客户端的一些例子,比如这个 。)

将代码放在文件“foo.ps1”中,然后使用“ powershell -File foo.ps1 ”在cmd.exe(或.bat文件)中运行 。 退出时,退出代码将存储在%errorlevel%中。

请注意,您可能需要修改PowerShell脚本执行策略(或使用“-ExecutionPolicy Bypass”cmdline选项 )以允许执行脚本 – 有关更多信息,请参阅MSFT的此文档 。

 param( [string] $remoteHost = "arbitrary-remote-hostname", [int] $port = 23 ) # Open the socket, and connect to the computer on the specified port write-host "Connecting to $remoteHost on port $port" try { $socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port) } catch [Exception] { write-host $_.Exception.GetType().FullName write-host $_.Exception.Message exit 1 } write-host "Connected.`n" exit 0 

你可以使用netcat ,会话日志:

  C:\Users\User>nc -v -t stackoverflow.com 23 stackoverflow.com [198.252.206.16] 23 (telnet): TIMEDOUT C:\Users\User>echo %errorlevel% 1 C:\Users\User>nc -v -t stackoverflow.com 25 stackoverflow.com [198.252.206.16] 25 (smtp) open 220 SMTP Relay SMTP 421 SMTP Relay SMTP session timeout. Closing connection C:\Users\User>echo %errorlevel% 0 

Checking for exit status didn't work.是什么意思Checking for exit status didn't work.

如果你把你的退出码打印出来,那么在执行之前,响应将会是在解析FOR循环时ERRORLEVEL将成为errorlevel的值。

在每次调用telnet时都要显示这个值

  ... "C:\Windows\System32\telnet.exe" %host_name% !mwa_port%%i! echo Exit Code is !errorlevel! 

where !errorlevel!errorlevel的运行时间值。

很有可能你想要禁止telnet输出,所以>nul和/或2>nul可能会被有效地连接以使其静音。 可能你需要提供一个响应telnet – 不是我的区域…

现在 – 如果errorlevel没有返回一个可用的值,是否有任何telnet响应可以观察到区分你感兴趣的状态?