ルーターのIPアドレスを(ちょうど)表示する方法は?


22

ルーターのIPアドレスだけを取得するために、どのコマンドを実行できますか?

このコマンドを使用すると、たとえばルーティングテーブル全体ではなく、ルーターのIPのみが必要になります(実行時のようにroute -n)。

回答:


22

ワンライナー:

  • 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}'


シンプルnm-tool | grep -oP '(?i)gateway:\s*\K\S+'
アビナッシュラジ

@AvinashRajありがとう!私はgrepとawkを深く研究していないので、すでに持っている知識を操作します。これは知っておくと良いでしょう
セルギーKolodyazhnyy

おそらく、これは私の構成の何らかの(追加の)特性によるものですが、アダプターeth0wlan0、両方ともアクティブに接続されているが、ゲートウェイのみが構成されているマシンではwlan0nm-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.0192.168.1.1ます。(ip route ...とのroute -n ...方法は192.168.1.1、私が最も望ましい結果だと思うだろう、ちょうど生成します。)
エリアカガン

これは、ネットワークがによって管理されていない場合は動作しませんnetwork-managerによって例えばifupdownまたはifconfigそれらのケース..in nm-toolこの答えが単独で管理されているネットワークに依存している一言で言えばoutput..in希望発生しませんnetwork-manager...
heemayl

@EliahKaganああ、なるほど。私のコマンドの場合、「gateway」を含む行を見つけ、スペースで区切られた1行としてエコーし、その中の2番目の項目を切り取ります。そのような行が2行あるため、私のコマンドはそのうちの1行のみを出力します。この場合、Avinashのコマンドの方が優れています。0.0.0.0に関しては、関連するものがあります。heemaylのコメントについては、はい、それは事実です。OPの質問には、出力を表示する以外の仕様はありませんでした
Sergiy Kolodyazhnyy

7

あなたはそれを多くの方法で見つけることができます

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}'

以下のためにあなたがoに必要としないuniqだけでtracepath -m 1 8.8.8.8 | awk '/1:/ {print $2;exit}'5インチになります。
アビナッシュラジ

たくさんの選択肢。私のシステムでは、uniqなしで2回印刷されます。あなたのソリューションも機能します。
パンサー


ちなみに、@ bodhi.zazen、答えにはバリエーションがあります。tracerouteを使用してください。同じアイデアの異なるコマンドですよね?
セルギーKolodyazhnyy

@serg確かに、おそらくコマンドとフィルターオプションの長いリストがあります。sed、awk、perl、grep ...
Panther

6

通常使用するように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)"
アビナッシュRaj

1

私はこれを頻繁に使用します:

route -n | awk '{ print $2 }' | grep -Eo '[1-9]{0,3}\.[1-9]{0,3}\.[0-9]{0,3}\.[1-9]{0,3}'

住所がどうしたら192.168.0.1
アビナッシュラジ

1

システム上のWebブラウザにアクセスできる場合は、http://whatsmyrouterip.com/にアクセスできます。して、コマンドなしでIPを見つけることができるはずです。

それ以外の場合は、単にターミナルを開いて実行するip route | grep defaultだけで十分です。ネットワークインターフェイスに応じて複数の情報が得られる場合があります。


0

私はこれを非常に頻繁に使用し、覚えやすいです:

route | grep default | awk '{print $2}'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.