拆分问题:这个另一个这是适用于 Windows 的。
Linux:从命令行禁用互联网(保留 LAN)的最快方法?
我认为在 Linux 中停用互联网(不是 LAN)的最简单方法是删除默认网关,因此,假设 LAN 是 10.0.2.0/24 且网关是 10.0.2.1:
sudo /sbin/route del default gw 10.0.2.1
要重新激活互联网:
sudo /sbin/route add default gw 10.0.2.1
但是,即使这一行简单,它也需要先发现默认网关 IP:
sudo /sbin/route
我打算编写一些通用的 shell 脚本,用于启用/禁用互联网(但保持 LAN 正常工作),因此看来我需要一些(¿ grep
,也许?)操作来过滤和检测准确的网关 IP 号(可能是 10.0.2.1、127.0.0.1、127.0.50.1、192.168.0.1 ... 等),除非我找到更简单的命令行。
有什么想法吗?
答案1
在 *nix 上,要查找网关:
GW="$(sudo /sbin/route -n | awk '$1=="0.0.0.0" {print $2; exit}')"
sudo /sbin/route del default gw "$GW"
echo "$GW" >~/my_tmp_file
最后一行将值保存在文件中,以供以后想要重新启动网络时使用:
sudo /sbin/route add default gw "$(cat ~/my_tmp_file)"
笔记:如果有多个默认网关,则需要为每个默认网关再次运行此代码,或重写此代码以支持该网关。
怎么运行的: 上述awk
命令能够捕获网关,因为route -n
输出如下所示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.2.1 0.0.0.0 UG 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
互联网网关允许目的地在任何地方 ( 0.0.0.0
)。因此,awk
脚本逐行查看此输出,查看第一列($1
在awk
符号中称为)。当第一列是目的地-任何地方时,它会打印第二列,即网关。命令的输出awk
随后被捕获到 shell 变量中GW
。然后可以要求 shell 替换$GW
为需要它的任何命令。