Powershell: Определите текущий используемый физический сетевой адаптер, позволяющий подключаться к Интернету

#powershell #networking #routes #vpn

Вопрос:

Я пытаюсь определить используемый физический сетевой адаптер с помощью powershell.

У меня есть некоторые части для функции, которую я создаю, но у меня есть проблемы с определением фактического используемого физического адаптера:

  1. С Get-NetAdapter -Physical | Select-Object Name, InterfaceDescription, ifIndex, Status помощью я могу получить физические сетевые адаптеры, и если они подключены: здесь я также получаю индекс интерфейса (соответствующий позже).:
Имя Описание интерфейса ifIndex Статус
Локальная сеть Подключение Intel(R) Ethernet (4) I219-V 23 Вверх
вай-Фай Двухдиапазонная беспроводная связь Intel(R)-AC 8265 8 Вверх
  1. С Get-NetRoute -InterfaceIndex <interface index> | Where-Object {$_.AddressFamily -eq 'IPV4'} помощью я могу получить маршруты для всех интерфейсов (в данном случае 2)

Проблема в том, что оба интерфейса имеют маршрут 0.0.0.0/0 для своего соответствующего шлюза, поэтому любой из них может направить меня в «обычный» Интернет (скажем, google.com).

Итак, как мне определить фактический используемый интерфейс?. Я думаю, что метрика интерфейса в обоих случаях может мне помочь:

ifIndex Destinationпрефикс Следующий шаг Маршрутометрический ifMetric
8 0.0.0.0/0 192.168.3.1 256 40
23 0.0.0.0/0 192.168.1.1 256 25

Таким образом, интерфейс Ethernet (ifIndex = 23) имеет значение IfMetric 25. Поскольку RouteMetric одинакова для обоих, теоретически интерфейс Ethernet будет иметь приоритет.

Это относится к подключениям с VPN-клиентами или без них (действительно, для этих тестов я подключаюсь через VPN-клиент), но:

а. Я не уверен на 100%, что это может сработать каждый раз.

b. Что делать, если метрика маршрута отличается для интерфейсов?. Что имеет приоритет: ifMetric, RouteMetric или комбинация того и другого?.

Буду рад прочитать ваши комментарии или впечатления по этому поводу.

Спасибо!

Ответ №1:

Это комбинация показателей из моего опыта, однако обычно я получаю окончательный ответ, выполнив Test-NetConnection команду по URL или IP, и в выводе этой команды будет указан интерфейс, который она использовала. Я использую его для обеспечения того, чтобы трафик проходил через наш VPN-адаптер, но в вашем случае, если вы сделали Test-NetConnection -ComputerName www.google.com это, он вернет псевдоним интерфейса используемого интерфейса, который вы можете использовать, чтобы найти ifindex и сопоставить его с адаптером, если у вас несколько адаптеров

Комментарии:

1. Привет!. Не думал об этом…выглядит намного проще с подключением к тестовой сети. Я сделаю несколько тестов. Большое спасибо!.

2. Хорошо, я это проверил.

3. Хорошо, я это проверил. Проблема в том, что при работе с VPN подключение к тестовой сети для одного из ресурсов VPN (например, внутреннего Sharepoint) будет проходить через адаптер VPN (очевидно), который в конечном итоге является виртуальным адаптером, использующим физический адаптер…