宛先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スクリプトがネット接続が確立しているかどうかを識別するために必要です。
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE
これで問題が解決するはずです。
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 get
はdefaultまたは.0.0.0/をパラメータとして受け入れないためip route show default
は、デフォルトゲートウェイのトリックを実行する必要があります。または、ip route get <someip>
特定のIPアドレスのルートを確認します。
netstat
を使用してこれを実行したい場合(つまり、NOT Linuxで機能する)一般的な解決策は次のとおりです。
netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
これは、ホスト名を解決するのではなくIPを使用してルーティングテーブルを示しています(netstat -rn
)、
デフォルトゲートウェイを探します(0.0.0.0
またはdefault
で始まる行)、
そしてゲートウェイホスト(結果の2番目のフィールド)を出力します。
正規表現での\
文字の増加は重要です。
\(
および\)
はグループを指定します\|
は代替文字(左側のものまたは右側のものと一致)\.
で表されます-正規表現.
(任意の単一の文字に一致)ではなく、リテラル文字.
を意味しますこれが私のやり方です:
#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}
ip route show default | grep default | awk {'print $3'}
ここでしますか
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セントにすぎません。
非常に簡単な方法...ルーティングテーブルに、ネットワーク外のIPに到達する方法を尋ねます
Google DNS == 8.8.8.8
ip route get 8.8.8.8