web-dev-qa-db-ja.com

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

インターネットを有効/無効にする必要があるいくつかの汎用シェルスクリプトを作成します(ただし、LANは機能し続けます)。そのため、フィルタリングして検出するためにいくつかの([grep、多分?)操作が必要になるようです正確なゲートウェイIP番号(10.0.2.1、127.0.0.1、127.0.50.1、192.168.0.1などになる可能性があります)。ただし、より簡単なコマンドラインを見つけた場合は除きます。
何かアイデアはありますか?

10

* 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スクリプトは、最初の列(awk表記では$1と呼ばれる)を1行ずつ見て、この出力を通過します。最初の列がdestination-anywhereの場合、ゲートウェイである2番目の列を出力します。次に、awkコマンドの出力がシェル変数GWに取り込まれます。シェルは、それを必要とするコマンドに$GWを代入するように要求できます。

8
John1024