it-swarm-ru.tech

Как узнать, какой интерфейс я использую для подключения к интернету?

Я имею eth0 а также wlan0 в соответствии с ifconfig и ​​я могу ping google.com.

Как я могу узнать (с обычным пользователем, а не root), какой интерфейс активный, например, какой интерфейс использует пинг (или что-то еще, пинг не обязателен)?

Я использую Ubuntu 11.04 или Fedora 14

56
LanceBaynes

Вы можете использовать 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 указывает, какой интерфейс используется.

55
Job

Моя версия, которая в основном основана на это и это :

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

И это экспериментально для macOS:

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

В системах 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)'
11
Torgeir

Один лайнер:

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

8
h0tw1r3

Получите сетевой интерфейс по умолчанию, который обычно используется для маршрутизации к "оставшемуся" Интернету в противоположность DMZ, частной сети, VM Host и т.д.), Которые обычно маршрутизируются явно.

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

Запуск ifconfig даст вам необходимую информацию.

Активный интерфейс будет иметь inet addr И покажет запись переданных данных, например:

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

Вы также можете использовать команду ip addr, И любые неактивные интерфейсы будут обозначаться как: NO-CARRIER.

6
jasonwryan

Команда 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 
2
Shadur

Используйте эту команду:

$ route | grep default | awk '{print $8}'
enp0s3
1
Larry Catt

используйте ниже:

ip r | grep default
0
akash

Если ваша машина имеет несколько интерфейсов (что я предполагаю), то нет одного интерфейса, который будет использоваться для подключения к Интернету.

В зависимости от пункта назначения, к которому вы подключаетесь, ваша система сверится с таблицей ip (показанной при выполнении команды route), чтобы найти следующую надежду/маршрутизатор, когда она найдет, она будет использовать интерфейс связано с этим.

Тем не менее, пожалуйста, обратитесь к @ torgeir's answer , поскольку это именно так:

  1. Данный домен (жестко задан как google.com, что является единственным плохим моментом в ответе)
  2. Решает это ip
  3. Консультируется с таблицей ip для использования маршрута (и, следовательно, интерфейса).
0
kdehairy

Различные дистрибутивы Linux, Unix, некоторые версии Microsoft Windows и многие другие операционные системы не ограничиваются использованием только одного сетевого интерфейса для доступа в Интернет. Многие операционные системы обнаруживают более одного действующего интерфейса, способного подключаться к Интернету, и настраивают каждый из них для передачи трафика в Интернет (в частности, шлюзы, которые в конечном итоге подключаются к Интернету). Если ОС пытается связаться с внешней сетью и успешно использует eth0, он добавит этот интерфейс в таблицу маршрутизации и свяжет его с этой сетью. Если ОС пытается получить доступ к той же внешней сети, а также успешно использует eth1, он также добавит этот интерфейс (eth1) в таблицу маршрутизации как дополнительный способ доступа к той же сети. До сих пор другие авторы не рассматривали важность значений метрик в таблице маршрутизации. Моя таблица маршрутизации ниже показывает два разных интерфейса, eth0 а также wlan0. Оба активны, оба были автоматически установлены операционной системой как маршруты по умолчанию к шлюзу 192.168.1.1, и оба автоматически создали операционной системой маршрут к 192.168.1.X сеть. Вся эта таблица маршрутизации была написана ОС автоматически. Никакие правки к нему не были сделаны мной. Разница, показанная здесь, в том, что интерфейс проводной сети Ethernet (eth0) имеет более низкую метрику (202), и, таким образом, большая часть моего трафика на узлы за пределами моего будет направляться через этот интерфейс (предпочтительнее по более низкой метрике), а остальная часть моего трафика на узлы за пределами моей собственной воли маршрутизироваться через беспроводной интерфейс (wlan0) (он имеет более высокую метрику 303 и, следовательно, менее предпочтителен для ОС).

[email protected]:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.1     0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

Оба интерфейса используются для доступа к "Интернету", и их использование взвешивается значениями "Метрика", как видно из статистики байтов и пакетов для eth0 и wlan0 ниже:

[email protected]:~ $ ip -s address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope Host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope Host 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:31:a2:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.195/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0
       valid_lft 80787sec preferred_lft 69987sec
    inet6 fe80::2f3f:3f1d:8c35:a05e/64 scope link 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    14341060   22393    0       0       0       971     
    TX: bytes  packets  errors  dropped carrier collsns 
    1190274    10745    0       0       0       0       
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:31:a2:c8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.193/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
       valid_lft 80787sec preferred_lft 69987sec
    inet6 fe80::4f31:5fcf:8f70:b5ca/64 scope link 
       valid_lft forever preferred_lft forever
    RX: bytes  packets  errors  dropped overrun mcast   
    4963408    7954     0       0       0       929     
    TX: bytes  packets  errors  dropped carrier collsns 
    49371      235      0       0       0       0       

Легко видеть, что операционная система получает больше трафика от eth0. Многие операционные системы предоставляют более низкий показатель для проводного интерфейса, который имеет более быстрое соединение, и более высокий показатель для проводного интерфейса с более медленным подключением. Например, если eth0 а также eth1 оба подключаются к одному и тому же узлу, но eth0 договорились о соединении 100 МБ и eth1 согласовано только соединение 10 МБ, eth0 будет иметь более низкую метрику, чем eth1. Аналогичным образом, многие операционные системы будут предоставлять более низкий показатель для проводного интерфейса и более высокий показатель для беспроводного интерфейса.

Можно настроить несколько интерфейсов автоматически (в зависимости от ОС) или вручную, чтобы достичь одного и того же внешнего узла путем создания/редактирования записей в таблице маршрутизации.

0
Just Jeff