ifconfigに基づいてeth0とwlan0があり、できping google.com
ます。どのインターフェイスがアクティブであるか、(どのユーザーがpingは必須ではないのか)など、どのインターフェイスがアクティブであるかを(ルートではなく通常のユーザーで)知るにはどうすればよいですか?
注:Ubuntu 11.04またはFedora 14を使用
ifconfigに基づいてeth0とwlan0があり、できping google.com
ます。どのインターフェイスがアクティブであるか、(どのユーザーがpingは必須ではないのか)など、どのインターフェイスがアクティブであるかを(ルートではなく通常のユーザーで)知るにはどうすればよいですか?
注:Ubuntu 11.04またはFedora 14を使用
回答:
を使用route
して、デフォルトルートを見つけることができます。
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 1 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Iface
宛先のある行の列は、default
使用されているインターフェースを示します。
route
できません。@Torgeirには正解があります。
192.168.1.0...
、で始まるエントリが使用されるルートになります。もちろんこの場合、同じIfaceを指しますが、それはマシンに1つのインターフェースがあるからです。
route | grep '^default' | grep -o '[^ ]*$'
そして、これは実験的に、macOSの場合:
route -n get default | grep 'interface:' | grep -o '[^ ]*$'
route |awk '/^default/{print $NF}'
GNU / Linuxシステムの場合:
#!/bin/sh
# host we want to "reach"
host=google.com
# get the ip of that host (works with dns and /etc/hosts. In case we get
# multiple IP addresses, we just want one of them
host_ip=$(getent ahosts "$host" | awk '{print $1; exit}')
# only list the interface used to reach a specific host/IP. We only want the part
# between dev and src (use grep for that)
ip route get "$host_ip" | grep -Po '(?<=(dev )).*(?= src| proto)'
host
がスクリプトへの入力引数である場合、答えはより正確です。ルート(およびインターフェイス)は、IPごとに異なる場合があるため。
実行ifconfig
すると、必要な情報が得られます。
アクティブなインターフェイスには、inet addr
送信されたデータの記録があり、次のように表示されます。
RX bytes:1930741 (1.8 Mb) TX bytes:204768 (199.9 Kb)
このip addr
コマンドを使用することもできます。非アクティブなインターフェイスは次のように指定されますNO-CARRIER
。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
route
コマンドを使用することです。ただし、ルーティングが原因で必ずしも完全な方法とは限りません。多くの場合、デフォルトルートはインターネットにアクセスするためのものである必要はありません。
通常明示的にルーティングされるDMZ、プライベートネットワーク、VMホストなどの反対側の「残りの」インターネットへのルーティングに通常使用されるデフォルトのネットワークインターフェイスを取得します。
$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0
ip -4 route ls |awk '/^default/{print $5}'
マシンに複数のインターフェースがある場合(私が想定している場合)、インターネットへの接続に使用されるインターフェースはありません。
接続先に応じて、システムはipテーブル(route
コマンドを実行したときに表示されるテーブル)を参照して次の希望/ルーターを見つけ、見つけた場合は、それに関連付けられたインターフェイスを使用します。
とはいえ、@ torgeirの答えを参照してください。