使用一条命令简单高效地显示所有在线主机:【已解决】【高速版】如何显示(扫描)局域网中所有的在线主机IP及MAC地址;
使用NScript的支持全IP范围跨度的脚本,请参见这篇文章:【已解决】【NScript版】如何使用脚本扫描局域网中的在线主机?
脚本用途
有些情况下,我们想扫描局域网内的在线主机,以进行后续相关操作;
虽然大部分情况下,路由器管理页面或者APP可以得到这些主机的地址及在线状态;
但是有一些例外,比如:
1. 某些主机是固定IP并且不上网(即不连接Internet);
2. 路由器没有发现主机的功能;
3. 没有路由器管理员密码;
等等...
这些时候,我们就需要扫描主机了;
脚本文件
这里提供了一个脚本以扫描局域网的主机:
脚本代码如下(文件名"scanhost.vbs",保存编码"ANSI"):
' 局域网主机扫描脚本;
' 详细介绍: https://blog.csdn.net/milaoshu1020/article/details/116144712
' 20210426 1.1 修改脚本,新增指定IP范围的功能;
' 20210425 1.0 初始版本,实现了双击扫描局域网的服务器;
Set shell = createobject("wscript.shell")
Set fso = createobject("scripting.filesystemobject")
If LCase(fso.getbasename(wscript.fullname)) = "wscript" Then
shell.run "cscript """ & wscript.scriptfullname & """",1,False
wscript.quit
ElseIf wscript.arguments.count = 2 Then
startip = wscript.arguments(0)
endip = wscript.arguments(1)
Else
wscript.stdout.write "请输入起始IP(如192.168.3.0): "
startip = wscript.stdin.readline
wscript.stdout.write "请输入终止IP(如192.168.3.255):"
endip = wscript.stdin.readline
End If
startarr = Split(startip,".")
startprefix = startarr(0)
endarr = Split(endip,".")
endprefix = endarr(0)
If startprefix <> endprefix Then
wscript.echo "为了防止计算溢出,起始IP和终止IP的第一段必须相同!"
wscript.stdin.readline
wscript.quit
End If
Set http = createobject("winhttp.winhttprequest.5.1")
For i=ip3tonum(startarr) To ip3tonum(endarr) ' ip范围
s = numtoip3(startprefix,i)
t = "[" & now & "] "
http.open "get","http://" & s,False
On Error Resume Next
Err.clear
http.send
If Err.number = 0 Then
wscript.echo t & s & " -> " & http.status & ": " & http.statustext & vbcrlf
Else
wscript.echo t & s & " -> " & Err.number & ": " & Err.description
End If
On Error GoTo 0
Next
wscript.echo "done!"
wscript.stdin.readline
Function Ip3ToNum(iparr)
ret = CLng(iparr(1))
ret = ret * 2^8 + CLng(iparr(2))
ret = ret * 2^8 + CLng(iparr(3))
ip3tonum = ret
End Function
Function NumToIp3(ByVal prefix, ByVal num)
Dim arr(3)
arr(3) = (num \ 2^0) Mod 2^8
arr(2) = (num \ 2^8) Mod 2^8
arr(1) = (num \ 2^16) Mod 2^8
arr(0) = prefix
numtoip3 = Join(arr,".")
End Function
下载地址:
链接:https://pan.baidu.com/s/1oFV1m3dJbIeL_aQUjXxHjg
提取码:h8au
运行方式
双击"scanhost.vbs"脚本文件即可运行;
结果分析
扫描结果一般有3种:
1. 200: OK (数字2xx,3xx,4xx,5xx与此类似) --- 此种情况表示该IP主机不仅在线,而且提供HTTP服务;
2. -2147012867: 无法与服务器建立连接 --- 此种情况表示IP主机在线,但不提供HTTP服务;
3. -2147012894: 操作超时 --- 此种情况表示IP主机不存在或不在线;
为什么使用脚本而不是程序?
1. 因为脚本编写简单,免去了使用开发环境的麻烦;
2. 因为脚本是开源的,运行的就是文本代码,不用担心有病毒;
注意事项
由于vbs对mod运算符所使用的数字有限制(32位有符号整型),所以只能使用支持64位运算的NScript对IP范围进行全面的设定;为了防止计算溢出,VBS起始IP和终止IP的第一段必须相同;