宛先を指定して、LINUXでデフォルトゲートウェイを取得するにはどうすればよいですか?


11

宛先0.0.0.0を使用して、デフォルトゲートウェイを取得しようとしています

次のコマンドを使用しました:netstat -rn | grep 0.0.0.0

そしてこのリストを返します:

Destination - Gateway      - Genmask         - Flags - MSS - Window - irtt - Iface
10.9.9.17   - 0.0.0.0      - 255.255.255.255 - UH    - 0     0        0    - tun0
133.88.0.0  - 0.0.0.0      - 255.255.0.0     - U     - 0     0        0    - eth0
0.0.0.0     - 133.88.31.70 - 0.0.0.0         - UG    - 0     0        0    - eth0

ここでの私の目標は、宛先0.0.0.0を使用してデフォルトゲートウェイをpingすることです。したがって、それは「133.88.31.70」です。しかし、これは 'grep'を使用しているためリストを返します。

質問:デフォルトゲートウェイのみを取得するにはどうすればよいですか?ネット接続がアップしているかどうかを識別するために、bashスクリプトで必要になります。

回答:


21
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE

これで問題が解決するはずです。


@Suezy Ha!見る?ああ!
ジェレミーパウエル

最後にシングルクォートを閉じる/ブラケットを閉じない
マークKコーワン

3
私はこのコマンドでオンラインでかなりの数の回答を見てきましたが、それらのどれもが「デフォルトの表示」が使用される理由を説明していません。実際、パラメータなしの「ip route show」はまったく同じことをします。私の質問は、なぜコマンドに「デフォルト」があるのですか?どういう意味ですか?
user658991

@ user658991私はこのうさぎの穴を下っていましたが、あなたはまさにその通りです。そこの最も一般的なバージョンでは何もしませip。実際にip route showはのエイリアスでip route listありman ip、このサブコマンドが構文を持っていることを確認することができますip route { list | flush } SELECTOR...そして、リストされているこれらの有効なセレクターの1つがであるわけではありませんdefault。私たちは自分のやりたいことをやるip route show table default べきだと思っていますが、残念ながらそうではありません。他の人にも、行の先頭に一致します(警告されています):ip route show | awk '/^default/{print $3}'
L0j1k

5
 ip route show default 0.0.0.0/0

このコマンドはip route | grep、多くの(10000+)ルートを持つシステムでのデフォルトよりもはるかに高速です

バックアップとして完全なBGPと手動のデフォルトルートを使用するルーターの例を探します

router:~# time ip route show default 0.0.0.0/0
default via XXX.XXX.192.254 dev eth0.123 

real    0m0.707s
router:~# time ip route | grep default
default via XXX.XXX.192.254 dev eth0.123 

real    0m8.596s
  • なぜならip route show default show、私だけではなく、デフォルトルートのすべてのルート
  • デフォルトまたは0.0.0.0/0をパラメータとしてip route get受け入れないため

iproute2を介した直接ネイティブフィルタリングを示すための+1 !この驚くべきユーティリティスイートが、(確かに創造的な)レガシーLinux textfuよりも正確で、信頼性が高く、パフォーマンスが高い場合が非常に多くあります
RubyTuesdayDONO

1
これは素晴らしい答えです!しかし、私はまだiproute2のドキュメントに少し混乱しています。コマンドの「デフォルト」は何を意味しますか?ドキュメントを正しく読んでいる場合、このコマンドは「ip route show to default 0/0」と同じであるはずです、正しいですか?「0/0」フォーマットとは何ですか?
user658991

3

ip route show defaultデフォルトゲートウェイのトリックを行う必要があります。またはip route get <someip>、特定のIPアドレスのルートを確認するために使用できます。


私はip routeを試してみましたが、すべてのゲートウェイのリストが表示されます。そして、はい、デフォルトのものも下部に表示されます。ありがとう。=)しかし、ここでの私の目標は、そのデフォルトゲートウェイに使用されるIPアドレスを取得することです。bashスクリプトを使用して、そのスクリプトに対してpingを実行し、起動しているかどうかを確認します。
スージー2009

「show default」のエントリが4つあります。「ip route show default | awk '/ default / {print $ 3}'」は、IPアドレスのみを取得します。
デビッドパシュリー

2

を使用してこれを実行したい場合netstat(したがって、Linuxではないものでも動作します)、一般的な解決策は次のとおりです。

netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'

これが示すルーティングテーブル、IPを使用してではなく、ホスト名を解決(netstat -rn)、
デフォルトゲートウェイ(行で始まる探し0.0.0.0又はdefault)、
及びゲートウェイ・ホスト(結果の2番目のフィールド)を印刷します。

\正規表現での文字の急増は重要です。

  • \(\)グループを指定します
  • \| 代替文字です(左側のものまたは右側のものが一致します)
  • IPアドレス内のドットは、次のように表されます\.- .正規表現ではなくリテラル文字を意味します.(任意の単一文字に一致)

1
grep -eまたはegrep、ブラケットとパイプをエスケープする必要なくトリックを実行しますegrep '^(default|0\.0\.0\.0)'
Mark K Cowan

1

これは私がそれを行う方法です:

#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}

1
 ip route show default | grep default | awk {'print $3'}

ここでやる


grep defaultすでにコマンドでdefaultルートを指定しているのはなぜipですか?
リンデ

0

非常に簡単な方法...ルーティングテーブルに、ネットワーク外のIPに到達する方法を尋ねる

Google DNS == 8.8.8.8

ip route get 8.8.8.8


0
ip route show 0/0

または

ip route show 0.0.0.0/0

または

ip route show 0.0.0.0/0.0.0.0

または

ip -f inet route show default

または

ip -4 route show default

正しく理解できれば、その正確なルート(すべてゼロのルート)のデフォルトゲートウェイルックアップは、IPv4の場合は0.0.0.0/0.0.0.0(または0/0)であるか、0000:0000:0000:0000:0000:0000です。 :0000:0000(または::) IPv6の場合。

ただし(!)、使用するAFを指定せず(-4または-6または-f inetまたは-f inet6)、またはすべてゼロのルートをIPv4またはIPv6プレフィックスとして指定しない(0/0はIPv4を意味する) 、「デフォルト」が何であるかを把握できません...

個人的には、manページでこれについてはっきりしているとは思いませんが、それは私の2セントに過ぎません。

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