Определите, есть ли у NIC доступ в Интернет (по сравнению с локальной, закрытой сетью)

2

Есть ли способ в PowerShell автоматически определить, какой из нескольких сетевых адаптеров имеет доступ к Интернету, а не подключение к закрытой сети?

Скажем, у компьютера есть один сетевой адаптер, который обычно может выходить в Интернет, и другой сетевой адаптер, подключенный к небольшой сети научных устройств. Они оба имеют IP-адреса и видят «сеть». Существует ли общий способ определения подключенного интернета ?

Я знаю о:

gwmi win32_networkadapterconfiguration -filter "ipenabled = 'true'"

а также

gwmi win32_networkadapter -filter "NetConnectionStatus LIKE '2'"

а также

Get-NetAdapter | ? {($_.status -eq 'up')

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

Благодарю.

Teknowledgist
источник

Ответы:

3

Test-ConnectionКомандлет позволяет указать адрес источника с -Sourceпараметром. Мы можем проверить адреса, используемые каждым адаптером.

$adapters = Get-NetIPAddress -AddressFamily ipv4 | Where-Object InterfaceAlias -in (Get-NetAdapter | Select-Object -ExpandProperty Name) | Select-Object IPAddress,InterfaceAlias

$adapters | % {

    Test-Connection -Source $_.IPAddress -Destination 8.8.8.8 -ErrorAction SilentlyContinue | Out-Null

    if($?) {
        write-host $_.InterfaceAlias "(" $_.IPAddress ") can connect to the internet."
    }
    else {
        write-host $_.InterfaceAlias "(" $_.IPAddress ") failed to connect to the internet."
    }

}

Выход:

Local Area Connection ( 10.1.1.2 ) can connect to the internet
Ethernet 2 ( 10.1.1.3 ) failed to connect to the internet.
Wireless Network Connection ( 10.1.1.4 ) failed to connect to the internet.
корень
источник
Я не осознавал, что test-connectionу меня есть -sourceвыбор. Это именно то, что я искал! К сожалению, -sourceи -quietне могут быть использованы оба.
Teknowledgist
0

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

Get-NetRoute -DestinationPrefix "0.0.0.0/0"

Это даст вам ifIndexадаптер, который должен быть подключен к Интернету. То же самое ifIndexможно использовать для получения адаптера ...

Get-NetAdapter -InterfaceIndex <number from previous command>
Магнус
источник
Вы уверены, что маршрут по умолчанию нельзя назначить сетевой карте, не подключенной к Интернету? Я сталкивался с проблемой, связанной с тем, что в Linux ранее был назначен маршрут по умолчанию, в зависимости от того, какой сетевой адаптер был включен первым. Я предполагаю, что Windows могла бы обработать это ...
Марек Рост
Ну, маршрут по умолчанию - это то, куда идет весь трафик, если он не указан в таблице маршрутизации. Так что, если маршрут по умолчанию указывает на внутреннюю сеть, у вас вообще не будет доступа к Интернету .. :) (Возможно, будет несколько маршрутов по умолчанию, хотя .. Просто разные приоритеты)
Магнус
1
Вы также можете использовать что-то вроде, Find-NetRoute -RemoteIPAddress 8.8.8.8чтобы получить индекс интерфейса, который будет направлять трафик к этому IP.
Магнус
Моя конечная цель - отключить доступ к Интернету, оставив соединения локальной сети в покое. Как только я отключаю сетевой маршрут по умолчанию, следующий сетевой адаптер становится стандартным (я полагаю). Хотя это было бы редко, я не могу предположить, что только две сетевые карты (одна онлайн и одна локальная), поэтому я должен перебрать все сетевые карты со статусом «вверх».
Teknowledgist