netsh 并阻止访问除一个 WLAN 以外的所有 WLAN
netsh and blocking access to all but one WLAN
目前,我正在使用这个:
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
然后为我家的 WLAN 创建一个特殊的白名单过滤器
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
输出中搜索从 /i
开始的 /b
行,不考虑大小写 /L
文字 /c:
这个常量字符串。
标记化是使用标记 3
和 *
(该行的其余部分)使用默认定界符执行的,其中包括 space,因此过滤的典型 SSID 行将是
SSID 5 : WLAN2
令牌 1 是 SSID
,2 是 5
,3 是 :
,4 是 WLAN2
由于第一个指定的令牌是 3
,因此该令牌被分配给 %%a
,下一个令牌被分配给 %%b
。
然后如果 %%b
中的令牌与 allowed
字符串不匹配,则阻止它(好吧,该命令只是 echo
ed 用于调试 - 更改 echo(netsh
到 netsh
激活。
如果你要使用
set "allow=%~1" instead of `...WLAN1` then you could run<br>
这批 WLAN4
阻止除 WLAN4
以外的所有内容。
目前,我正在使用这个:
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
然后为我家的 WLAN 创建一个特殊的白名单过滤器
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
输出中搜索从 /i
开始的 /b
行,不考虑大小写 /L
文字 /c:
这个常量字符串。
标记化是使用标记 3
和 *
(该行的其余部分)使用默认定界符执行的,其中包括 space,因此过滤的典型 SSID 行将是
SSID 5 : WLAN2
令牌 1 是 SSID
,2 是 5
,3 是 :
,4 是 WLAN2
由于第一个指定的令牌是 3
,因此该令牌被分配给 %%a
,下一个令牌被分配给 %%b
。
然后如果 %%b
中的令牌与 allowed
字符串不匹配,则阻止它(好吧,该命令只是 echo
ed 用于调试 - 更改 echo(netsh
到 netsh
激活。
如果你要使用
set "allow=%~1" instead of `...WLAN1` then you could run<br>
这批 WLAN4
阻止除 WLAN4
以外的所有内容。