温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现批处理查看同一子网络下的所有IP在线情况

发布时间:2021-09-28 10:08:18 来源:亿速云 阅读:143 作者:iii 栏目:开发技术

本篇内容介绍了“如何实现批处理查看同一子网络下的所有IP在线情况”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

:::::::查看所有子网IP.bat:::::::
@echo off
title 查看所有子网IP

set /a Online=0
set /a Offline=0
set /a Total=256
set ExportFile=子网IP在线统计.txt
:: 初始化在线IP与不在线IP的个数为零,共扫描256个IP,结果输出的文件名

set StartTime=%time%
:: 记录程序的开始时间

for /f "delims=: tokens=2" %%i in ('ipconfig /all ^| find /i "IP Address"') do set IP=%%i
:: 获得本机IP [注1]

if "%IP%"=="" echo 未连接到网络 & pause & goto :EOF
if "%IP%"==" 0.0.0.0" echo 未连接到网络 & pause & goto :EOF
:: 当IP为空或 0.0.0.0 时,提示未连接并退出该程序

for /f "delims=. tokens=1,2,3,4" %%i in ("%IP%") do (
  set /a IP1=%%i
  set /a IP2=%%j
  set /a IP3=%%k
  set /a IP4=%%l
)
:: 以句点为分隔符,分别将IP的四个十进制数赋给四个变量

set /a IP4=0
echo 在线的IP:>%ExportFile%
:: 初始化IP的第四个数值为零,并创建结果输出文件

:RETRY
ping %IP1%.%IP2%.%IP3%.%IP4% -n 1 -w 200 -l 16>nul && set /a Online+=1 && echo %IP1%.%IP2%.%IP3%.%IP4%>>%ExportFile% || set /a Offline+=1
:: ping 目标IP [注2]

set /p =[将本文底部评论4中的退格符替换到此处]set /a Scanned=%Online%+%Offline%
set /a Progress=(%Online%+%Offline%)*100/%Total%
set /p =正在扫描:%Scanned%/%Total% 扫描进度:%Progress%%%:: 删除当前行的内容,并重新显示进度信息 [注3]

set /a IP4+=1 
if %IP4% lss %Total% goto :RETRY
:: 当IP的第四个数值小于总数时,跳转回 :RETRY 处,重复执行直到全部 ping 完为止

echo.
echo.

set EndTime=%time%
:: 记录程序的结束时间

set /a Seconds = %EndTime:~6,2% - %StartTime:~6,2%
set /a Minutes = %EndTime:~3,2% - %StartTime:~3,2%
if %Seconds% lss 0 set /a Seconds += 60 & set /a Minutes -= 1
if %Minutes% lss 0 set /a Minutes += 60
:: 计算时间差

set /a Percent=%Online%*100/(%Online%+%Offline%)
:: 计算在线百分比

echo 在线IP个数:  %Online%
echo 不在线IP个数: %Offline%
echo 在线百分比:  %Percent%%%
echo 统计耗时:   %Minutes%分%Seconds%秒
echo 统计日期:   %date% %time:~0,-3%
echo.>>%ExportFile%
echo 在线IP个数:  %Online%>>%ExportFile%
echo 不在线IP个数: %Offline%>>%ExportFile%
echo 在线百分比:  %Percent%%%>>%ExportFile%
echo 统计耗时:   %Minutes%分%Seconds%秒>>%ExportFile%
echo 统计日期:   %date% %time:~0,-3%>>%ExportFile%
echo 记录已保存到文件"%ExportFile%"中
::显示结果并将结果保存到文件中
pause
::::::::::::::::::::::::::::::::

注1. ipconfig 是内置于 Windows 的 TCP/IP 应用程序,用于显示本地计算机网络适配器的物理地址和IP地址等配制信息,这些信息一般用来检验手动配置的 TCP/IP 设置是否正确。当在网络中使用 DHCP 服务时, ipconfig 可以检测到计算机中分配到了什么IP地址,是否配置正确,并且可以释放,重新获取IP地址。这些信息对于网络测试和故障排除都有重要的作用。[3]
更详细的说明请参阅 ipconfig/? 。ipconfig /all ,参数 /all 表示查看详细的网络配置。命令 ipconfig /all ^| find /i "IP Address" 表示在 'ipconfig /all 的结果中,以 "IP Address" 为查找对象,进行搜索(其结果类似于:IP Address. . . . . . . . . . . . : 10.30.11.51 )。

而整条命令中的 for 语句,则表示在上述结果中,以冒号为间隔(delims=:),查找第2个字串(tokens=2)。很明显,所找到的结果就是自己电脑当前的IP地址了(如果您只有一快网卡或是只启用了一个网卡的话。显然,对于多个网卡会显示出多个IP的情况,我并没有考虑的太全面)。[关于 for 更详细请参阅 4.2.4 小节]

另外,注意到在 ipconfig /all ^| find /i "IP Address" 中有一个转义字符 ^ ,它的作用是让后面的管道命令 | 生效,而不是让程序把 | 误解为 for 语句里参数的一部分。

注2. ping 其实才是本批处理的核心部分。命令 ping 的主要作用是通过发送数据包并接收应答信息来检测两台计算机之间的网络是否连通。比如我可以输入 ping 10.30.11.35 以便查看我是否能与我所在的局域网中IP为 10.30.11.35 的机器连通。如果我不懂批处理的话,也许我就得从 IP 10.30.11.1 开始,挨个地 ping 到 IP 10.30.11.255 ,才能达到我在本小节的最初目的。

在批处理中 ping 的3个参数 -n 1 -w 200 -l 16 分别表示:仅 ping 一遍[-n 1],等待200毫秒后按超时考虑[-w 200],发送16字节的数据[-l 16]。

另外,此命令行中同时用到了两个 && 和一个 || 的组合命令,我不得不承认这种复杂的逻辑关系会给您带来阅读上的困难。

注3. 这里使用了 set /p =显示内容

“如何实现批处理查看同一子网络下的所有IP在线情况”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI