ルーターの IP アドレスだけを取得するには、どのようなコマンドを実行すればよいですか?
このコマンドを使用すると、ルーターの IP のみが表示され、たとえば、ルーティング テーブル全体は表示されません ( を実行した場合などroute -n
)。
答え1
ワンライナー:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
nm-tool | grep -i gateway | awk '{print $2}
netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
arp -n | awk '{print $1}'
注: ネットワーク上に自分のマシンが 1 台しかない場合にのみ機能しますip route show | grep -i 'default via'| awk '{print $3 }'
出力:192.168.0.1
私にとって
注記:
15.04以降では はないnm-tool
ので を使用してくださいnmcli dev show <IFACE>
。例えば、
$ nmcli dev show wlan7 | grep GATEWAY
IP4.GATEWAY: 192.168.0.1
IP6.GATEWAY:
編集と追加情報
コマンドを調べればわかるように、出力を取得しnm-tool
(NetworkManager から情報を取得することに注意してください)、単語 を含む行を検索しgateway
、その情報を echo で出力し (スペースで区切る)、出力全体の 2 番目の項目だけを切り取っています。2 つ以上の接続がある場合は、 のxargs echo | cut -d' ' -f2
部分を削除して に置き換える必要があることに注意してくださいawk '{print $2}'
。つまり、行全体は次のようになりますnm-tool | grep -i gateway | awk '{print $2}'
。または、コメントで Avinash Raj が提案した を使用することもできますnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
。ご覧のとおり、ここでは特別なことは何も行われておらず、ここでの試練はすべて、cut、awk、grep などの出力編集ツールを使用するための単なる練習です。
ゲートウェイ情報を取得する別の方法は、nmcli dev list
(はい、依然としてネットワーク マネージャーに依存しています) コマンドを使用することです。 は、nmcli
ネットワーク マネージャーのコマンド ライン バージョンです。 を実行するnmcli dev list | grep -i routers
か、 を実行することができますnmcli dev list | grep -i 'gw ='
。 繰り返しますが、 を実行して、必要な IP アドレス以外のすべての情報を削除することもできます。
元の質問では、デフォルト ゲートウェイのみを印刷する仕様しかなかったため、ここでは nm-tool の出力に頼っています。NetworkManager は Ubuntu にデフォルトで付属しており、これは Ubuntu のネットワーク接続を管理するための標準的な方法です。wicd や wpa_cli 経由の接続など、他のものを使用する場合、nm-tool は回答を提供しません。そのような場合は、以下の他の人の回答の方が役立つかもしれません。
よりディストリビューションや設定に依存しないオプションとしてはnetstat -n
、 に似たカーネル ルーティング テーブルを使用するを使用することですroute -n
。その出力は以下のとおりで、驚くようなものではありません。
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
必要な情報を切り取る方法は次のとおりです。netstat -nr | awk '$1 == "0.0.0.0"{print$2}'
もう一つ、これも中立的です:arp -n | awk '{print $1}'
答え2
いろいろな方法で見つけられます
ip route show default
もっと良い質問は、出力をどのように形作りたいかということです。
ip route show | awk '/default/ {print $3}'
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2}' | uniq
コメントより -(ありがとう、Avinash Raj 0
tracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
答え3
通常どおり、このソリューションを と組み合わせてroute -n
試すことができます:sed
route -n
route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
ここにテストがあります:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
$ route -n | sed -nr 's/(0\.0\.0\.0) +([^ ]+) +\1.*/\2/p'
192.168.1.1
別の方法としては、以下を使用しますgrep
。
$ route -n | tr -s ' ' | grep -Po "(?<=0\.0\.0\.0 )[^ ]+(?= 0\.0\.0\.0)"
192.168.1.1
@AvinashRaj が指摘したように、これは のみを使用して実行できますgrep
( を使用してスペースを詰める必要はありませんtr
)。
route -n | grep -Po "0\.0\.0\.0\s*\K\S+(?=\s*0\.0\.0\.0)"
192.168.1.1
答え4
システム上でウェブブラウザにアクセスできる場合は、翻訳元:そして、コマンドなしで IP を見つけることができるはずです。
それ以外の場合は、ターミナルを開いて を実行するだけでip route | grep default
十分です。ただし、ネットワーク インターフェイスによっては、複数の結果が返される可能性があります。