在windows服务器上,经常需要批量telnet大量地址段端口,来确认网络是否畅通。如果一个个telnet耗时耗力,使用其他第三方程序,则担心不合规,有影响。因此考虑使用windows批处理或者powershell来编写
思路
- 写一个input文件,将ip和端口信息保存
- 脚本从input文件逐行读取,循环telnet,将不通的端口记录,输出到output中
powshell
$ports = @(60000) # 设置要测试的端口列表
$ipFile = "C:\Users\Administrator\Desktop\ip_list.txt" # 设置包含IP地址的文本文件路径
$outputFile = "C:\Users\Administrator\Desktop\result.txt" # 设置输出结果的文本文件路径
$ipAddresses = Get-Content $ipFile
foreach ($ip in $ipAddresses) {
foreach ($port in $ports) {
$tcpClient = New-Object System.Net.Sockets.TcpClient
try {
$connectTask = $tcpClient.ConnectAsync($ip, $port)
# 等待连接完成或超时(设置为3秒)
$waitResult = [System.Threading.Tasks.Task]::WaitAny($connectTask, [System.Threading.Tasks.Task]::Delay(3000))
if ($waitResult -eq 0 -and $tcpClient.Connected) {
$result = "IP $ip Port $port is open."
} else {
$result = "IP $ip Port $port is closed."
}
} catch {
$result = "Failed to connect to IP $ip Port ${port}: $_"
} finally {
$tcpClient.Close()
}
$result | Out-File -FilePath $outputFile -Append
}
}
批处理
@echo off
set INPUT_FILE=input.txt
set OUTPUT_FILE=output.txt
set FAILURES_FILE=failures.txt
REM 清空输出文件和失败记录文件
break > %OUTPUT_FILE%
break > %FAILURES_FILE%
REM 逐行读取输入文件
for /f "tokens=*" %%A in (%INPUT_FILE%) do (
echo Connecting to %%A
telnet %%A >> %OUTPUT_FILE% 2>&1
REM 检查telnet命令的退出代码
if not errorlevel 1 (
echo Telnet to %%A succeeded.
) else (
echo Telnet to %%A failed. >> %FAILURES_FILE%
)
echo. >> %OUTPUT_FILE%
)
echo 批量 telnet 执行完成,成功记录保存在 %OUTPUT_FILE% 文件中,失败记录保存在 %FAILURES_FILE% 文件中。
pause
powershell写起来较为复杂,批处理执行有问题,有些系统运行得不到结果
可以根据自己的情况取舍
标签:批量,windows,ip,telnet,echo,%%,result,FILE% From: https://blog.51cto.com/u_11555417/7140226