インターネットへの接続に使用しているインターフェイスを確認する方法は?


48

ifconfigに基づいてeth0とwlan0があり、できping google.comます。どのインターフェイスがアクティブであるか、(どのユーザーがpingは必須ではないのか)など、どのインターフェイスがアクティブであるかを(ルートではなく通常のユーザーで)知るにはどうすればよいですか?

注:Ubuntu 11.04またはFedora 14を使用


2
以下の解決策は、あなたが自分で推論することを望んでいるようですが、それは正しくないようです。(そして、みんなのルーティングテーブルは、信じられないほど簡単な見て!)私は、Windowsの同等を探していますが、それが表示される「IPルートのget <IPアドレス>」とのインタフェースを教えてくれますでしょうあなたがAに接続しようとした場合に使用されます指定されたIPアドレス。
mwardm

サーバー障害に関連する:特定のホストへのルートのインターフェイスを見つけます(ここで探したときに探していたものです)。
ワイルドカード

回答:


48

を使用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使用されているインターフェースを示します。


1
@JobがIPアドレスを持っている場合、どのインターフェイスを使用しているかを見つける方法
Bionix1441

1
これは受け入れられた答えであってはなりません。iprouteを使用してカスタムルーティングルールを定義している場合は使用routeできません。@Torgeirには正解があります。
ジョセフガローネ

1
この答えは正しくありません。たとえば、(回答に同じルートが表示されている場合)192.168.1.16(ローカルネットワーク上のpc)にpingを実行すると192.168.1.0...、で始まるエントリが使用されるルートになります。もちろんこの場合、同じIfaceを指しますが、それはマシンに1つのインターフェースがあるからです。
kdehairy

1
@Job google.comでも、それぞれ異なるインターフェースに2つのルートがある場合、長いマスクとの一致が選択されます(必ずしもデフォルトではありません)。デフォルトが意味することは、他のルートが見つからない場合は、このルートを調べてみましょう :)
kdehairy

1
「default ... eth0」という行と「default ... wlan0」という行が表示されます。それで、どれが本当のデフォルトですか?
AstroFloyd

26

基本的にこれこれに基づいている私のバージョン:

route | grep '^default' | grep -o '[^ ]*$'

そして、これは実験的に、macOSの場合:

route -n get default | grep 'interface:' | grep -o '[^ ]*$'

1
これをOSX用に翻訳する方法はありますか?
ジョンアラード

1
@JohnAllard:アップデートがmacOSに対して正しい答えを提供するかどうかを教えてください。
エブラヒムビャゴウィ

複数のパイプは必要ありません。使用するのはroute |awk '/^default/{print $NF}'
P ....

「eth0」と「wlan0」の2行が表示されるため、どちらがアクティブかはまだわかりません...
AstroFloyd

9

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

1
これらのコマンドが何をしているのか説明してください。また、あなたはあなたの値が何であるか知っているので、おそらくここでかなり安全ですが、一般的には、シェル変数の参照を引用する必要があります)。
G-Manは「Reinstate Monica」と言います14

1
ある程度、完了しました。これを投稿したのは、これを正確に実行できるものが見つからなかったからです。これをパペットマニフェストのカスタムファクトとして使用しています...
トルジェール14年

hostがスクリプトへの入力引数である場合、答えはより正確です。ルート(およびインターフェイス)は、IPごとに異なる場合があるため。
kdehairy

6

実行ifconfigすると、必要な情報が得られます。

アクティブなインターフェイスには、inet addr送信されたデータの記録があり、次のように表示されます。

RX bytes:1930741 (1.8 Mb)  TX bytes:204768 (199.9 Kb)

このip addrコマンドを使用することもできます。非アクティブなインターフェイスは次のように指定されますNO-CARRIER


OPはルートになりたくないため、実行可能ファイルへのフルパスを指定する必要がありますか?
-tshepang

どちらのコマンドにも昇格した特権は必要ありません。
-jasonwryan

1
UbuntuとArch:どちらも通常の特権で実行されます(Ubuntuでは/ sbinですが)
jasonwryan

1
@Shadurなく、私のUbuntu 10.10のインストールとに応じてオンhelp.ubuntu.com/community/EnvironmentVariablesデフォルトの$ PATHがある/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
jasonwryan

2
これは、ポスターが持っていることを示しているように、複数のインターフェースを備えたシステムで必ずしも役立つとは限りません。より良い答えは、routeコマンドを使用することです。ただし、ルーティングが原因で必ずしも完全な方法とは限りません。多くの場合、デフォルトルートはインターネットにアクセスするためのものである必要はありません。
user1801810

6

一発ギャグ:

ip route get 8.8.8.8 | sed -n 's/.*dev \([^\ ]*\) table.*/\1/p'


そこにはぶら下がる引用があります。現状のままでは動作しません
クレース

@Krease著者は答えを更新しました
ヴァディムコトフ

5

通常明示的にルーティングされるDMZ、プライベートネットワーク、VMホストなどの反対側の「残りの」インターネットへのルーティングに通常使用されるデフォルトのネットワークインターフェイスを取得します。

$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0

目的の場所に到達するのは常にデフォルトのルートではありません。OPはほとんどの場合、デフォルトルートを使用してインターネットにアクセスしていますが、これは一般化であり、常に当てはまるとは限りません。注意の言葉
メルバースラン

もちろん、これはデフォルトのネットワークインターフェースにすぎません。複数の接続がある場合、実際には「インターネットへの接続」ではなく、正確な宛先へのルーティングに使用されるネットワークインターフェイスについて説明する必要があります。
EugeneP

複数のパイプ/ grepsを使用する必要はありませんip -4 route ls |awk '/^default/{print $5}'
P ....

2

このコマンドip route lsは、アクティブなルートとそのソースのリストを提供します。

caleburn: ~/ >ip route ls
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.7 
default via 192.168.10.254 dev eth0 

1

コマンドを使用:

[root@linux1 network-scripts]# route|grep default | awk '{print $8}'
enp0s3

[root @ linux1 network-scripts]#route | grep default | awk '{print $ 8}' enp0s3 [root @ linux1 network-scripts]#
ラリーキャット


0

マシンに複数のインターフェースがある場合(私が想定している場合)、インターネットへの接続に使用されるインターフェースはありません。

接続先に応じて、システムはipテーブル(routeコマンドを実行したときに表示されるテーブル)を参照して次の希望/ルーターを見つけ、見つけた場合は、それに関連付けられたインターフェイスを使用します。

とはいえ、@ torgeirの答えを参照してください。

  1. ドメインを指定します(google.comとしてハードコードされていますが、これが答えの唯一の悪い点です)
  2. IPを解決します
  3. 使用するルート(およびインターフェイス)のipテーブルを参照します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.