目前,我正在使用这个:
netsh wlan add filter permission=block ssid="WLAN1" networktype=infrastructure
隐藏特定的 WLAN SSID,使其不显示在系统托盘中。由于通常有不止一个可用,我决定将它们全部放在一个 *.bat 文件中,就像这样
@echo off
netsh wlan add filter permission=block ssid="WLAN1" networktype=infrastructure
netsh wlan add filter permission=block ssid="WLAN2" networktype=infrastructure
netsh wlan add filter permission=block ssid="AnotherWLAN" networktype=infrastructure
etc
只需单击一下即可全部屏蔽。
但是,这只会在被阻止的 WLAN 具有那些预定义的 SSID 时隐藏它们。如果他们改变了他们的 SSID,他们会再次出现,我必须改变我的文件。如果有几个,这不是问题,但通常会超过 20 个。
我想做什么
有没有办法让我使用 netsh 和 if、for 或 while 循环来阻止除了我选择的一个 SSID 以外的所有内容?例如,在(损坏的)伪代码中
SET myWLAN = Home // e.g. home WLAN SSID = Home
if (! SSID == myWLAN) {
loop through the available SSID, and block them via netsh
}
或者,您会建议我只选择:
netsh wlan add filter permission=denyall networktype=infrastructure
然后为我家的无线局域网创建一个特殊的白名单过滤器
netsh wlan delete filter permission=block ssid="myWLAN SSID" networktype=infrastructure
我对这一切还很陌生,所以我们非常欢迎任何帮助。
最佳答案
@ECHO OFF
SETLOCAL
SET "allow=WLAN1"
FOR /f "tokens=3*" %%a IN ('netsh wlan show all^|findstr /i /b /L /c:"SSID "') DO (
IF "%%b" neq "%allow%" ECHO(netsh wlan add filter permission=block ssid="%%b" networktype=infrastructure
)
GOTO :EOF
此批处理搜索 netsh wlan show all
输出以 /b
开始 /i
而不管大小写 /L
文字 /c:
这个常量字符串。
使用包含空格的默认定界符使用标记 3
和 *
(该行的其余部分)执行标记化,因此过滤的典型 SSID 行将是
SSID 5 : WLAN2
token 1 是 SSID
,2 是 5
,3 是 :
,4 是 WLAN2
由于第一个指定的 token 是 3
,因此该 token 分配给 %%a
,下一个 token 分配给 %%b
.
然后如果 %%b
中的 token 与 allowed
字符串不匹配,则阻止它(好吧,命令只是 echo
用于调试 - 将 echo(netsh
更改为 netsh
以激活。
如果你要使用
set "allow=%~1" instead of `...WLAN1` then you could run<br>
这批 WLAN4
阻止除 WLAN4
之外的所有内容。
关于windows - netsh 并阻止访问除一个 WLAN 以外的所有 WLAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36303540/