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

24

На MBP (OS X 10.6.2) у меня настроены конфигурации проводной сети Ethernet и беспроводного аэропорта для использования одного и того же статического IP-адреса с моим маршрутизатором (например, как описано на http://forums.macrumors.com/archive/index). .php / t-708685.html ). Я также настроил Сервисный заказ так, чтобы проводное соединение находилось выше Аэропорта (например, как описано в Mac OS X, автоматически отключите Аэропорт, если подключен кабель Ethernet ).

Кажется, это «работает»: открытое соединение SSH с удаленным местоположением остается, когда я подключаю и отключаю кабель Ethernet. Однако, поскольку плата Airport остается активной (и подключенной к маршрутизатору) независимо от наличия проводного соединения, как я могу сказать, что проводной интерфейс на самом деле является «активным» соединением, когда оно доступно? Поскольку IP-адрес одинаков для обоих, это гарантия того, что беспроводной интерфейс не может быть использован? Есть ли другой способ узнать, используется ли этот интерфейс?

PS. Я собираюсь опубликовать (частичный) ответ, как только я опубликую это, поскольку сам процесс написания этого и проверки всех моих фактов приводит меня к некоторому пониманию. (Более интересная и неотвеченная часть выделена жирным шрифтом выше.)

простой эфир
источник

Ответы:

26

Точная ссылка на такие вопросы, как «Какой интерфейс будет использоваться для доступа к хосту wxyz?» для любого данного времени или ситуации стоит обратиться к таблице маршрутизации.

[mini-nevie:~] nevinwilliams% route get 10.10.10.10
   route to: 10.10.10.10
destination: default
       mask: default
    gateway: 192.168.2.1
  interface: en0
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0 

Я включил en0 и en1, и en0 является первым в сервисном заказе. Отключив мой Ethernet, не внося никаких других изменений, эта же команда дает:

mini-nevie:~] nevinwilliams% route get 10.10.10.10
   route to: 10.10.10.10
destination: default
       mask: default
    gateway: 192.168.2.1
  interface: en1
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0 
Невин Уильямс
источник
12

Я использую это:

if=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')

if [ -n "$if" ]; then
    echo "Default route is through interface $if"
else
    echo "No default route found"
fi
mivk
источник
2
iface(){ route get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}'; }
mralexgray
8

Вот дамп ifconfig -aв каждой ситуации (я выделю различия позже):

Кабель Ethernet подключен:

lo0: flags = 8049 mtu 16384
        inet6 :: 1 префикслен 128
        inet6 xxxx :: 1% lo0 с префиксом 64 scopeid 0x1
        inet 127.0.0.1 маска сети 0xff000000
gif0: flags = 8010 mtu 1280
stf0: flags = 0 mtu 1280
en0: flags = 8863 mtu 1500
        inet6 xxxx% en0 prefixlen 64 scopeid 0x4
        инет 192.168.0.110 маска сети 0xffffff00 широковещательная 192.168.0.255
        эфир хх: хх: хх: хх: хх: хх
        media: autoselect (100baseTX) статус: активен
        поддерживаемые носители: нет автоматического выбора 10baseT / UTP 10baseT / UTP 10baseT / UTP 10baseT / UTP 100baseTX 100baseTX 100baseTX 100baseTX 1000baseT 1000baseT 1000baseT 
fw0: flags = 8863 mtu 4078
        lladdr xx: xx: xx: xx: xx: xx
        медиа: авто-выбор статуса: неактивен
        поддерживаемые медиа: автоселект 
en1: flags = 8863 mtu 1500
        inet6 xxxx% en1 prefixlen 64 scopeid 0x6
        инет 192.168.0.110 маска сети 0xffffff00 широковещательная 192.168.0.255
        эфир хх: хх: хх: хх: хх: хх
        медиа: авто-выбор статуса: активен
        поддерживаемые медиа: автоселект

Кабель Ethernet отключен:

lo0: flags = 8049 mtu 16384
        inet6 :: 1 префикслен 128
        inet6 xxxx :: 1% lo0 с префиксом 64 scopeid 0x1
        inet 127.0.0.1 маска сети 0xff000000
gif0: flags = 8010 mtu 1280
stf0: flags = 0 mtu 1280
en0: flags = 8863 mtu 1500
        эфир хх: хх: хх: хх: хх: хх
        медиа: авто-выбор статуса: неактивен
        поддерживаемые носители: нет автоматического выбора 10baseT / UTP 10baseT / UTP 10baseT / UTP 10baseT / UTP 100baseTX 100baseTX 100baseTX 100baseTX 1000baseT 1000baseT 1000baseT 
fw0: flags = 8863 mtu 4078
        lladdr xx: xx: xx: xx: xx: xx
        медиа: авто-выбор статуса: неактивен
        поддерживаемые медиа: автоселект 
en1: flags = 8863 mtu 1500
        inet6 xxxx% en1 prefixlen 64 scopeid 0x6
        инет 192.168.0.110 маска сети 0xffffff00 широковещательная 192.168.0.255
        эфир хх: хх: хх: хх: хх: хх
        медиа: авто-выбор статуса: активен
        поддерживаемые медиа: автоселект

diff plugged unplugged показывает, что проводное соединение становится активным, когда оно доступно:

8,9d7
<   inet6 xxxx%en0 prefixlen 64 scopeid 0x4 
<   inet 192.168.0.110 netmask 0xffffff00 broadcast 192.168.0.255
11c9
<   media: autoselect (100baseTX <full-duplex,flow-control>) status: active
---
>   media: autoselect status: inactive
простой эфир
источник
1
Приложение: с помощью стороннего расширения «MenuMeters» ( ragingmenace.com/software/menumeters ) можно увидеть, какой интерфейс является «активным», а также пропускную способность, используемую для всех интерфейсов, что дает понять, что активный интерфейс действительно переключается должным образом (по желанию), когда проводное соединение подключено и удалено.
эфир
6

Пара вещей. Mac всегда будет использовать сетевые подключения в порядке, указанном в вашем профиле «Сетевые подключения». Например, если Ethernet поверх Wireless, Ethernet вступит во владение.

Я не уверен в том, как работает SSH, но из своего опыта. Если одно соединение не удается или отключается, SSH будет использовать другое соединение.

Если вы действительно хотите посмотреть, активны ли соединения, вы должны использовать утилиту мониторинга пропускной способности. Отличным примером является iStat ( http://www.islayer.com/apps/istatmenus/ ).

Стивен Лу
источник
1
Я случайно прочитал слишком быстро, да ... я сказал, что это сервисный заказ. Вы действительно должны взглянуть на монитор пропускной способности, чтобы увидеть, что происходит между всеми вашими подключениями.
Стивен Лу
ssh был тем, что я использовал для тестирования сети, но на самом деле подойдет любой TCP (постоянный) сеанс.
Эфир
0

Я воспользовался советом, чтобы сделать IP-адреса одинаковыми для Ethernet и WiFi, установить порядок обслуживания, как предложено, и просто использовал Network Utility> Info на en0 и en1.

Я запустил резервное копирование TimeMachine, и в разделе «Сетевая утилита»> «Информация»> en0 Ethernet я увидел, что через сетевое соединение проходили тысячи пакетов, а в «Сетевой утилите»> «Информация»> en1 WiFi ничего не двигалось.

Спасибо, что указали мне в правильном направлении. Когда резервное копирование TimeMachine будет завершено, я вернусь к отдельным IP-адресам и посмотрю, будет ли Mac все еще автоматически перемещать все через Ethernet.

Первоначальный вопрос был «Как узнать, какой сетевой интерфейс использует мой компьютер?» У меня работала сетевая утилита.

Macbook Pro 17 "Середина 2010, Горный лев

Gigapig
источник