一键切换网络配置

起因

由于家中装了软路由的缘故,产生了两个网关,一个是原本的网关,一个是软路由的网关,我可以改变设备的网关来决定数据是否经过软路由

但是每次都要手动去改那可太烦了,而且最近在尝试ChatGPT的时候发现软路由上的魔法竟然失效了,只有电脑本机运行魔法才可以访问,这意味着想要使用ChatGPT的话,我在打开电脑上的魔法软件前,要么关闭软路由的魔法(这会导致别的连接到软路由上的设备也没法使用魔法),要么手动去改电脑上的网关和DNS

因此借助ChatGPT整出了一个脚本,可以检测当前网络配置并在两种配置中切换,代码如下,REM是注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@echo off
REM 切换网络适配器的网关和DNS配置

REM 设定网络适配器名称,请确保这个名称与你的网络适配器名称匹配
SET "AdapterName=以太网"

REM 配置1
SET "Gateway1=192.168.0.1"
SET "DNS1_1=8.8.8.8"
SET "DNS1_2=8.8.4.4"

REM 配置2
SET "Gateway2=192.168.0.3"
SET "DNS2_1=192.168.0.3"
SET "DNS2_2=8.8.8.8"

REM 调试信息
echo 当前网络配置:
netsh interface ipv4 show config name="%AdapterName%"
echo.

REM 获取当前网关
for /f "tokens=2 delims=:" %%G in ('netsh interface ipv4 show config name^="%AdapterName%" ^| findstr "默认网关"') do (
for /f "tokens=* delims= " %%H in ("%%G") do (
set currentGateway=%%H
)
)

REM 调试信息
echo 当前默认网关: %currentGateway%

REM 根据当前网关切换配置
if "%currentGateway%"=="%Gateway1%" (
echo 当前配置为配置1,切换到配置2...
netsh interface ipv4 set address name="%AdapterName%" source=static addr=192.168.0.10 mask=255.255.255.0 gateway=%Gateway2%
netsh interface ipv4 set dns name="%AdapterName%" static %DNS2_1%
netsh interface ipv4 add dns name="%AdapterName%" %DNS2_2% index=2
) else if "%currentGateway%"=="%Gateway2%" (
echo 当前配置为配置2,切换到配置1...
netsh interface ipv4 set address name="%AdapterName%" source=static addr=192.168.0.10 mask=255.255.255.0 gateway=%Gateway1%
netsh interface ipv4 set dns name="%AdapterName%" static %DNS1_1%
netsh interface ipv4 add dns name="%AdapterName%" %DNS1_2% index=2
) else (
echo 无法识别当前网关配置: %currentGateway%
)

REM 确认配置已更改
echo 配置已更改:
netsh interface ipv4 show config name="%AdapterName%"

pause

如何使用?

  1. 把以上代码黏贴到记事本中

  2. 这段代码中,你需要设置好 AdapterName的名字,这可以在cmd中用ipconfig查到,一般叫“以太网”或者“网络连接”啥的,配置1,2中的两个网关和四个DNSif语句中的addr,这是你的电脑ip

  3. 将记事本文件另存为,后缀改成 .bat ,编码改成 ANSI

  4. 右键以管理员身份运行

  5. 大概就大功告成了?反正据我用下来是这样的,虽然会显示DNS错误或无效,但他还是生效了 什么傲娇