LinuxでゲートウェイIPアドレスを見つける方法


9

Linuxでeth0のゲートウェイIPアドレス(つまり、ホームルーターアドレス)を見つけるために使用できるコマンドは何ですか?

シェルスクリプトで使用するには、コマンドラインアプリからIPアドレスを取得する必要があります。


ルーターの外部IPアドレスを探していますか?これまでは、画面スクレイピングスクリプトを使用して、ルーターの設定ページからそのようなことを行ってきました。ほとんどのホームルーターは、内部から簡単にアクセスできるブラウザーベースのセットアップを備えています。一般的なソリューションを提供することは困難ですが、curlまたはwgetを使用してページをフェッチし、次にgrep&awkを使用してIPアドレスを取得できます。
トムバスコム

私の質問ではもっとはっきりしていたはずです。基本的に、イーサネットインターフェイスが1つしかないボックスでeth0に設定されているゲートウェイIPアドレスを検索します。偶然にも、これホーム、基本、LinksysタイプなどのNATルーターのIPアドレスである必要があります。シェルスクリプトでpingを実行できるようにするために必要です。
J. Polfer、2009年

私が必要としているものよりも複雑に見えますが、クールで機能することが保証されています。
J.ポルファー、2009年

回答:


18

デフォルトのgw IPのみを出力するには:

route -n | grep 'UG[ \t]' | awk '{print $2}'

すべてのインターフェースのルート情報を出力するには:

route -n

または

netstat -rn

UGはインターフェイスがアップしていることを要求しませんか?Gだけのほうがいいと思います。
J. Polfer、2009年

いずれにせよ、これは適切です。多くのありがとう。
J. Polfer、2009年

お知らせしたかったのですが、実際にはこの回答を使用していますが、grepパターンにGのみを使用しています。これを実行する必要があるマシンにiptoolsがありませんでした。
J.ポルファー2009年

2
:あなたは、awkはまた、可能なフィルタ、自分ではgrepを保存することができますroute -n | awk '{if($4=="UG")print $2}'
ケニーRasschaert

route -n|awk '$4~/G/{print $2; exit(0)}'最初のゲートウェイのようなものをお勧めしip route get IPますが、それrouteだけでは特定のIPに実際に到達するルートが一覧表示されるため、単独では見つけるのが難しいためです
Tino

9
ip route show 0.0.0.0/0 dev eth0 | cut -d\  -f3

私のエントリーです:)


私はこれを改善します:ip route show 0.0.0.0/0 | awk '{print $ 3}'
Dominic Eidson

私は
知り

また、cutバイナリの約20倍軽量ですawk
K3 --- 2015年

「dev eth0」を省略すると、eth0またはwlan0のどちらでも機能しますか?(LANケーブルが十分に長い場合は、これを試します)
Eric Nelson

それは私のためにopenwrt osのために働きました:)
Joy Acharya


3
$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.199.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr1
192.168.200.0   0.0.0.0         255.255.255.240 U         0 0          0 virbr2
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0
0.0.0.0         192.168.1.254   0.0.0.0         UG        0 0          0 wlan0

0.0.0.0がデフォルトゲートウェイであり、私の場所の192.168.1.254を指しています。


2

route -nまたはnetstat -rnからの出力、および宛先0.0.0.0を検索します。


2

私はiprouteパッケージを好みます:

# get the default route
ip route list | awk ' /^default/ {print $3}'
# get the default route but limit on eth0 (output may be empty)
ip route list dev eth0 | awk ' /^default/ {print $3}'

@sheepsimulator:残念ながら、これは悪い仮定です。Supermathieの提案はより優れています。
Dominic Eidson、2009年

@ドミニク・アイドソン-なぜ?マシンには物理イーサネットインターフェースが1つしかありません。
J.ポルファー、2009年

1
悪い仮定とは正確には何ですか?
マーティンM.

2

これより短い人は?=)

ip r | awk '/^def/{print $3}'

1
チャレンジが受け入れられました:ip r | awk 'END{print $3}'3文字短いです。
Kenny Rasschaert、2011

いいですが、KVMブリッジを備えたローカルのdebian / squeezeボックスでは、デフォルトのgwは1行目にあります。奇妙だが真実。したがって、あなたのクールなソリューションはどこでも機能しません:-/(とにかく+1)
ThorstenS

ipは一般的なUNIXコマンドではありません-したがって、どこでも機能しません。
Mei

あなたは正しいですが、$ SubjectはLinuxではなくUNIXを表します;)@David:うわー、本当にいいブログがあります!
ThorstenS 2011

1
read x x i x< <(ip r g 1)、結果は今後の使用のために変数$ iにあります
Tino

1

netstat -rn |awk '{if($1=="0.0.0.0") print $2}'

これにより、ゲートウェイIPがきれいに印刷されます。(Linuxスクリプティングはawkがないとどうなりますか?)


次に、代わりにsedを使用する必要があります...netstat -rn|sed -n '/^0.0.0.0/{ s/^[0. ]*//; s/ .*$//; p; }
Mei

0

インターフェイスファイルからゲートウェイを取得する場合:

#!/bin/bash
gateway=$(grep -P '^\tgateway' /etc/network/interfaces)
gateway=$(echo ${gateway:9})    # Remove "  gateway "   
echo "gateway = $gateway"
if [ $gateway == "" ]; then
    echo "gateway is blank"
    exit -1
fi

0

デフォルトゲートウェイのIPアドレスを取得するための1つのライナーコマンド:

route | grep default | awk '{print $2}'

-2

Linux OSでターミナルを開く使用しているLinuxディストリビューションに応じて、通常はトップバーまたはボトムバーにあります。ターミナルウィンドウを開いたら、次のコマンドを入力します。ここで、出力が表示されるまでしばらく待ち、画面のデフォルトゲートウェイアドレスを確認します。ゲートウェイアドレスは192.168.1.1のようになります。確認したら、Web管理パネルからルーターの設定を開始できます。

これでネットワークが修正されない場合は、新しいルーターが必要になる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.