拆分问题:这个另一个这是适用于 Linux 的。
我认为在 Windows 命令行中停用互联网(不是 LAN)的最简单方法是删除默认网关,因此,假设 LAN 是 10.0.2.0/24 且网关是 10.0.2.1:
`route delete 0.0.0.0 mask 0.0.0.0 10.0.2.1`
要重新激活互联网:
`route add 0.0.0.0 mask 0.0.0.0 10.0.2.1`
但是,即使这一行简单,它也需要先发现默认网关 IP:
在 Windows 中:
route print
我打算编写一些通用的 shell 脚本,用于启用/禁用互联网(但保持 LAN 正常运行),因此似乎我需要一些grep
等效操作来过滤和检测确切的网关 IP 号(可能是 10.0.2.1、127.0.0.1、127.0.50.1、192.168.0.1 ... 等),除非我找到更简单的命令行。
有什么想法吗?
- 编辑:有些人报告说,Windows 中的网关删除也可以像这样完成:
route delete 0.0.0.0
所以,显然修改@and31415 编写的删除脚本是没有问题的。
答案1
批处理脚本
如同 @John1024 的方法,您可以在 Windows 中执行以下操作:
禁用
@echo off
cd /d "%~dp0"
REM retrieve the current gateway
set dest=0.0.0.0
for /f "tokens=2,3" %%A in ('"route print %dest% | findstr /c:"%dest%" "') do (
REM save the IP and delete the gateway
echo %%A %%B>%dest%.txt
route delete %dest% >nul
)
exit /b
使能够
@echo off
cd /d "%~dp0"
REM ensure the settings file exists
set dest=0.0.0.0
if not exist %dest%.txt exit /b 2
REM restore the default gateway
for /f "tokens=1,2" %%A in (%dest%.txt) do (route add %dest% mask %%A %%B >nul)
exit /b