Sop*_*rez 13 networking linux internet command-line shell-script
拆分问题:这里的另一个是针对 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
Run Code Online (Sandbox Code Playgroud)
要重新激活互联网:
sudo /sbin/route add default gw 10.0.2.1
Run Code Online (Sandbox Code Playgroud)
但是,即使这是一条简单的线路,也需要先发现默认网关 IP:
sudo /sbin/route
Run Code Online (Sandbox Code Playgroud)
我将构建一些需要启用/禁用互联网(但保持 LAN 正常工作)的通用 shell 脚本,所以看来我需要一些(¿ grep
,也许?)操作来过滤和检测确切的网关 IP 号(它可能是 10.0.2.1、127.0.0.1、127.0.50.1、192.168.0.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
Run Code Online (Sandbox Code Playgroud)
最后一行将值保存在一个文件中,以备以后重新启动网络时使用:
sudo /sbin/route add default gw "$(cat ~/my_tmp_file)"
Run Code Online (Sandbox Code Playgroud)
注意:如果有多个默认网关,则需要为每个网关再次运行此代码,或重写以支持该代码。
工作原理: 上述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
Run Code Online (Sandbox Code Playgroud)
Internet 网关是允许目的地在任何地方 ( 0.0.0.0
) 的网关。因此,awk
脚本逐行查看第一列($1
以awk
符号表示)。当第一列是destination-anywhere 时,它会打印第二列,即网关。awk
然后命令的输出被捕获到 shell 变量中GW
。然后可以要求 shell 替换$GW
为任何需要它的命令。
归档时间: |
|
查看次数: |
24665 次 |
最近记录: |