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

本文的批处理可以让您知道自己所在局域网的同一网段下都有哪些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 =显示内容

本文的使用程度并不大,却很有趣,至少并没有想象中的那么愚蠢。

(0)

相关推荐

  • ip地址切换批处理脚本分享

    复制代码 代码如下: @echo offrem # ----------------------------------rem # 接口 IP 配置        rem # ---------------------------------- echo "=========IP 控制管理=========="echo "=> d: 自动获取IP"echo "=> h: 寝室 IP地址:66.168.1.8"echo "=&

  • Windows批处理双击切换IP地址方便、快捷

    不知朋友们是否有这样的经历,把本本带到单位上网时,由于单位需要配固定IP地址,而家里是自动获得IP地址的,所以每天都要对这个IP地址设置来设置去,那么有没有简单方便的办法呢?其实我们可以做一个批处理,每次要设置IP地址的时候只要运行一下批处理即可. 一.设置IP地址批处理,将如下代码用记事本保存为.bat文件,如:IPadd.bat,双击运行即可. 复制代码 代码如下: @echo off echo HTMer修改IP地址工具 echo 正在设置您的IP地址,请稍等-- netsh interf

  • 远程批量修改计算机IP设置的批处理

    网络IP设置远处更改脚本. 当网络整改需要大量IP修改的时候,可利用该脚本进行更改(重启计算机前不生效,可继续工作),然后等下班时间修改交换机配置,次日所有计算机启动后就可以用新IP工作了. 前提条件,知道域管理员密码或者所有计算机的本机管理员密码(后者比较麻烦),客户计算机为WIN2K或XP(防火墙开放135-139端口). 一条命令批量修改: for /l %i in (2,1,254) do net use //192.168.0.%i /user:admin@domain.com "pa

  • BAT批处理判断IP地址并自动禁用启用网卡

    某内网拨号软件设计问题,拨号后在偶然的情况下不能自动获取DHCP从而更新内网IP,后来发现通过手动释放和重新获取IP可以解决这个问题,但是每次在操作前还要看下IP地址是不是已经被更新为内网地址,若已经更新则无需操作,否则就要手动释放更新,每次敲一堆命令确实麻烦,于是打算做成批处理. 首先遇到的问题是如何获取IP地址,当然既然采用批处理那么就需要借助于现有的命令或者命令行程序,Windows系统内ipconfig命令可以获取IP地址等信息,如果我们只需要IP地址,那么就必须对获取的信息进行筛选过滤

  • Windows下用命令行修改IP地址的方法详解(附批处理文件)

    由于我所处的地方要经常在不同的网络之间切换,比如局域网.系统内部网和外网(光是外网我要常常在3个ADSL网之间切换).我之前一直用的方法是在本机上设置多个不同网段的IP,然后切换路由(Route),这样不同的网段通过不同的网关出去,就可以达到同时访问多个网络的目的.但是这样我发现经常可能出现一些问题,所以我决定用最原始的方法来解决,那就是在要使用某一个网段的时候就只用这个网段的IP,这样就需要不停的更换IP地址.当然,在Windows的"网络连接"属性中这样的更改是很麻烦的,不过还好的

  • 批处理获取网卡名称的代码(附修改IP、网关、DNS脚本)

    复制代码 代码如下: ::用ipconfig /all命令获取网卡名称. FOR /F "tokens=2*" %%i IN ('ipconfig/all^|find /i "Ethernet adapter "') DO set name=%%j ::用for命令删除网卡名称后面的冒号. FOR /F "tokens=1* delims=:" %%i in ("%name%") do set 网卡名称=%%i 套用上面的脚本

  • 批处理bat设置固定IP地址和自动IP地址

    在我个人的使用经验中,我有不同的工作环境,比如公司和家里,公司要求固定IP,而家里则使用自动获取IP的方式,所以我就在网上找了这段代码,并且经过自己的修改,可以直接双击运行就可以,方便IP地址的切换. 这里主要使用netsh命令,不太明白的可以自己去百度查,这里就不列举它的用法了,具体代码如下: 固定IP和DNS.bat 复制代码 代码如下: @echo off cls color 0A Echo *************************************************

  • 批处理、VBS实现自动设置IP、默认网关、DNS、WINS、IE代理(全)

    因为公司有同事负责大连.沈阳两个城市,经常在两地来回走动,到每个城市后,都要自己手动更改相应的网络配置,况且到外地时住的是酒店, 酒店上网是自动获得IP,又要将网络设置取消,真的很麻烦!于是想起写一个批处理!来解决这个问题!主要用到的命令是netsh. -.第一种方法是将两地的网络配置先进行本机设置,然后再导出,等用到的时候,再分别导入. 1.将现有的配置导出到d:\dalian.txt中: netsh –c interface dump > d:\dalian.txt 2.将之前导出的d:\d

  • 获取外网IP地址的批处理代码

    复制代码 代码如下: ::========================================== :: IP.bat :: v0.1 :: jinminghou.cn@2009-12-22 ::========================================== @echo off title GetIP set ip=unknown echo On Error Resume Next:Set oDOM=WScript.GetObject("http://www.j

  • 批处理查看同一子网络下的所有IP在线情况

    本文的批处理可以让您知道自己所在局域网的同一网段下都有哪些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 StartTi

  • linux命令行下使用curl命令查看自己机器的外网ip

    Linux命令行下如何查看自己机器的外网ip?可以在命令行下使用curl命令实现这个功能,试一下下面的命令吧 复制代码 代码如下: curl ifconfig.me 输入此条命令,就可以获取到本机的外网ip.

  • Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开和关闭,IP地址获取等等,早期的Android版本甚至支持对于IP的设置.在这里仅介绍其简单的一个小应用--获取IP地址. 首先先添加Uses-Permission:CHANGE_WIFI_STATE,WAKE_LOCK和ACCESS_WIFI_STATE.代码如下(AndroidManifest.

  • 虚拟机Linux桥接模式下设置静态IP详解

    本文研究的主要是虚拟机Linux桥接模式下设置静态IP的相关内容,具体介绍如下. 之前一直使用NAT模式,测试时android端远程访问虚拟机的mysql时发现无法连接,但是访问同学拷过来的虚拟机Linux的mysql却成功了,想了下原因是他设置的桥接模式.关于两种模式的区别,网上可以搜到一大堆文章,通俗点讲,NAT模式下,虚拟机从属于主机,也就是访问外部网络必须通过主机来访问,因此虚拟机的IP只有主机才能识别.而桥接模式下,虚拟机和主机是平行关系,共享一张网卡(使用网卡的多个接口),可以直接访

  • vm下centos7 mini版 NAT模式下配置静态IP的方法

    1.查看虚拟机的默认网关和子网掩码 a.vm菜单栏点击编辑->虚拟网络编辑器 b.选择VMnet8,点击NAT设置,查看子网掩码.网关IP 2. 修改服务器的网络配置 a. 修改主机名 hostnamectl set-hostname node01(可选) b. 编辑网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 其中主要的几处参数修改为: BOOTPROTO=static 设置为静态ip ONBOOT=yes 设置开机启动网卡 IPADDR

  • Linux下指定源ip进行ping操作的方法

    [序言] 目前在做一台电脑上两个虚拟机之间的通信. 对于每个虚拟机都有两个网卡,一个桥接模式和一个NAT模式. 那么问题来了.... 如果使用简单的ping ip形式的命令得到ping通的结果,只能证明两个虚拟机可以ping通,那究竟是使用了哪块网卡去ping另一个虚拟机? [解答] ping指令带上参数就可以指定源ip去ping目的ip. 形式如下:ping -I 192.168.195.130 192.168.195.132 (192.168.195.130是源ip,192.168.195.

  • python在linux系统下获取系统内存使用情况的方法

    本文实例讲述了python在linux系统下获取系统内存使用情况的方法.分享给大家供大家参考.具体如下: """ Simple module for getting amount of memory used by a specified user's processes on a UNIX system. It uses UNIX ps utility to get the memory usage for a specified username and pipe it

  • 使用jupyter Nodebook查看函数或方法的参数以及使用情况

    第一种,在方法后面加问号,然后执行,如 abs? 第二种,光标移动到方法上面,按shift+tab,弹出文档,连续按选择文档详细程度 补充知识:Jupyter notebook如何查看代码提示/doc文档/函数(方法)用法? 选中需要查看的函数方法按快捷键Shift+Tab 光标直接放上面再按快捷键Shift+Tab就可以了,不用拖动选取,如: 右上角的^符号是展开,x是关闭,展开后变成这样: 右上角x是关闭,x左边的按钮是用新标签打开,那样更方便浏览. 怎么样,简单吧! 20200311 更新

  • CentOS7下如何配置ip forward(虚拟路由器)

    Linux 中ip forward功能是一个比较方便实用的功能,只需要简单配置,添加几条路由,即可实现ip转发.本文基于CentOS 7下采取一台机器充当虚拟路由,来实现Windows环境与Linux环境中相互通信.具体见下文,供大家参考. 一.环境及需求说明 本地测试环境,由于Win7+VMware这台机器网卡太新,无法被VMware EXSi识别,无奈之下就直接装了个Win7,然后再上面基于Vmware workstation 12开启了一些临时测试的虚拟机.其次本地直连网段192.168.

  • CMD命令行下修改网络IP设置的方法

    比较简单的版本,你只要知道需要设置的ip与dns信息就可以了 @echo. @echo ----------------------------------------- @echo 本命令将自动为"本地连接"填写以下内容: @echo IP地址:192.168.0.118 @echo 网关: 192.168.0.1 @echo DNS: 202.96.128.86 @echo ----------------------------------------- @echo. @echo

随机推荐