web-dev-qa-db-ja.com

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

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

私はこのコマンドを使用しました:netstat -rn | grep 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スクリプトがネット接続が確立しているかどうかを識別するために必要です。

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

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

21
David Pashley
 ip route show default 0.0.0.0/0

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

フル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デフォルトルートだけでなく、すべてのルートが私にとって
  • ip route getdefaultまたは.0.0.0/をパラメータとして受け入れないため

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

3
Zanchey

netstatを使用してこれを実行したい場合(つまり、NOT Linuxで機能する)一般的な解決策は次のとおりです。

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

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

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

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

これが私のやり方です:

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

ここでしますか

1
ActionParsnip
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セントにすぎません。

0
user155186

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

Google DNS == 8.8.8.8

ip route get 8.8.8.8

0
Dave.B