ルーターのIPアドレスだけを取得するには、どのようなコマンドを実行すればよいのでしょうか?
このコマンドを実行すると、ルータの IP アドレスだけが表示され、例えば、ルーティングテーブル全体は表示されません(route -n
を実行したときのように)。
ワンライナー
-nmool | grep -i gateway | awk '{print$2}
-f2arp -n | awk '{print $1}'
注意: あなたのマシンがネットワーク上で唯一のものである場合のみ動作します。ip route show | grep -i 'default via'| awk '{print $3 }'
を実行します。と出力されます。私の場合は 192.168.0.1
です。
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 から情報を取得します) の出力を取り出し、gateway
という単語を含む行を見つけ、その情報を echo で表示し (スペースで区切って)、そしてその出力全体のうち 2 番目の項目だけを切り取っています。もし、2つ以上の接続がある場合には、xargs echo | cut -d' ' -f2
の部分を削除して、awk '{print $2}'
に置き換える必要があるかもしれないことに注意 してください。あるいは、コメントで Avinash Raj が提案したように nm-tool | grep -oP '(?i)gateway:\s*\KS+'
を使用することもできます。見ての通り、ここでは何も特別なことはしておらず、ここでの試練は単に 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}' ` です。
さまざまな方法で見つけることができます
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
を使っているので、この 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