Linux 命令行:禁用互联网(保留 LAN)的快速方法?

Linux 命令行:禁用互联网(保留 LAN)的快速方法?

拆分问题:这个另一个这是适用于 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脚本逐行查看此输出,查看第一列($1awk符号中称为)。当第一列是目的地-任何地方时,它会打印第二列,即网关。命令的输出awk随后被捕获到 shell 变量中GW。然后可以要求 shell 替换$GW为需要它的任何命令。

相关内容