ルーターのIPアドレスを取得するために、どのコマンドを実行できますか?
このコマンドを使用すると、たとえば、ルーティングテーブル全体ではなく、ルーターのIPのみが必要になります(route -n
を実行するときのように)。
ワンライナー:
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}'
注:マシンがネットワーク上にある場合にのみ機能しますip route show | grep -i 'default via'| awk '{print $3 }'
出力:192.168.0.1
for me
NOTE:
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から情報を取得します)、Wordを含む行を検索しますgateway
、エコー(空白で区切られた情報)そして、その出力全体の2番目の項目のみを切り取ります。 2つ以上の接続がある場合は、_remove 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}'
もう1つ、中立的:arp -n | awk '{print $1}'
あなたはそれを多くの方法で見つけることができます
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}'
通常route -n
を使用するので、route -n
と組み合わせたこのsed
ソリューションを試すことができます。
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
システム上のWebブラウザーにアクセスできる場合は、 http://whatsmyrouterip.com/ にアクセスでき、コマンドなしでIPを見つけることができるはずです。
そうでなければ、単に端末を開いてip route | grep default
を実行するだけで十分です。ネットワークインターフェイスに応じて複数の情報が得られる場合があります。
私はこれを頻繁に使用します:
route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'
私はこれを非常に頻繁に使用し、覚えやすいです:
route | grep default | awk '{print $2}'
hostname -I
190.200.200.107 172.21.0.1 172.17.0.1 172.19.0.1 172.18.0.1
iPの問題のみを取得するには
hostname -I | cut -d' ' -f1
190.200.200.107