回答:
ワンライナー:
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
私にとって
注:
15.04以降にはno 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つ以上の接続がある場合は、上部の取り外しxargs echo | cut -d' ' -f2
部品が必要な場合がありawk '{print $2}'
ます。言い換えると、行全体はこのようになりますnm-tool | grep -i gateway | awk '{print $2}'
。あるいはnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
、Avinash Rajがコメントで提案したように使用することもできます。ご覧のとおり、ここでは特別なことは何も行われていません。ここでの試練は、切り取り、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}'
eth0
とwlan0
、両方ともアクティブに接続されているが、ゲートウェイのみが構成されているマシンではwlan0
、nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2
単に出力のみ0.0.0.0
です。nm-tool | grep -oP '(?i)gateway:\s*\K\S+'
2行を出力0.0.0.0
し192.168.1.1
ます。(ip route ...
とのroute -n ...
方法は192.168.1.1
、私が最も望ましい結果だと思うだろう、ちょうど生成します。)
network-manager
によって例えばifupdown
またはifconfig
それらのケース..in nm-tool
この答えが単独で管理されているネットワークに依存している一言で言えばoutput..in希望発生しませんnetwork-manager
...
あなたはそれを多くの方法で見つけることができます
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}'
uniq
だけでtracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'
5インチになります。
通常使用するように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
tr
、grepだけで仕事をしますroute -n | grep -Po "0\.0\.0\.0 \s*\K\S+(?=\s*0\.0\.0\.0)"
システム上のWebブラウザにアクセスできる場合は、http://whatsmyrouterip.com/にアクセスできます。して、コマンドなしでIPを見つけることができるはずです。
それ以外の場合は、単にターミナルを開いて実行するip route | grep default
だけで十分です。ネットワークインターフェイスに応じて複数の情報が得られる場合があります。
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
nm-tool | grep -oP '(?i)gateway:\s*\K\S+'