【已解决】【VBS版】如何使用脚本扫描局域网中的在线主机?

使用一条命令简单高效地显示所有在线主机:【已解决】【高速版】如何显示(扫描)局域网中所有的在线主机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的第一段必须相同;

可以在局域网发送消息的vbs程序,小巧,易用 go.exe 命令参数: /p 图片路径 [-L1 -L2 -H1 -H2 -B1 -Q1] /z 公告内容 /t 公告时长 /n 网吧名称 /u 网址 --------------------------------------------------------------------------------------------- /p 背景路径 /z 公告内容 /t 公告时长 /n 网吧属名 /u 给公告加连接 ( /p /z /n /t )四位参数的组合使用或其三位与三位以下参数组合时候,参数不分前后,加上/U时一定要按指定格式书写! '当公告在执行的其间,任务管理器失效,自动退出后,任务管理器复原! 1.增加/u参数 必须用上 /p /z /t /n 四个参数之时,/u才存在,否则都会出错!而且要以下面的顺序格式才OK! ----------------------------------------------------------------------------------------------- 1 2 3 4 5 < /p 图片路径 /z 公告内容 /t 公告时长 /n 网吧名称 /u 网址> 例: go /n 盈众网吧 /p Background.jpg /z 请注意好您的贵重物品 /t 5 /u http:\\www.sina.com.cn (注意:网址的斜线必须为"\") ----------------------------------------------------------------------------------------------- 2.增加六种颜色: (注意: 必须使用在公告内存后面,下面有例子) ----------------------------------------------------------------------------------------------- <-L1> <-L2> <-H1> <-H2> <-B1> <-Q1> ~~~字母匀为大写,小写无效~~~~ 蓝 绿 红 黄 白 青 例: go /z 请注意好您的贵重物品,如有丢失,本网吧概不负责 -B1 /t 3 ----------------------------------------------------------------------------------------------- 3. 去掉了广告 4. 加动态移出! 5.链接为“公告内容”
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

milaoshu1020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值