回答:
ワンライナー:
nm-tool | grep -i gateway | xargs echo | cut -d' ' -f2nm-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+'