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 字符串不匹配,则阻止它(好吧,该命令只是 echoed 用于调试 - 更改 echo(netshnetsh 激活。

如果你要使用

set "allow=%~1" instead of `...WLAN1` then you could run<br>

这批 WLAN4

阻止除 WLAN4 以外的所有内容。