Determine se uma NIC possui acesso à Internet (vs local, rede fechada)

1

Existe alguma maneira no PowerShell de determinar automaticamente qual das várias NICs tem acesso à Internet em vez de uma conexão com uma rede fechada?

Digamos que um computador tenha uma placa de rede que geralmente pode ser enviada para a Web e outra placa de rede conectada a uma pequena rede de dispositivos científicos. Ambos têm endereços IP e veem uma "rede". Existe uma maneira genérica de determinar qual é a Internet conectada?

Eu sei sobre:

gwmi win32_networkadapterconfiguration -filter "ipenabled = 'true'"

e

gwmi win32_networkadapter -filter "NetConnectionStatus LIKE '2'"

e

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

mas não está claro para mim que esses filtros estão identificando o acesso Internet versus apenas o acesso à rede e, infelizmente, eu não tenho acesso a uma máquina com esse tipo de configuração para testar.

Obrigado.

    
por Teknowledgist 03.11.2017 / 14:37

2 respostas

2

O cmdlet Test-Connection permite especificar o endereço de origem com o parâmetro -Source . Podemos testar os endereços usados por cada adaptador.

$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."
    }

}

Saída:

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.
    
por 03.11.2017 / 15:46
0

Acredito que a melhor maneira seria verificar qual adaptador a rota padrão usa.

Get-NetRoute -DestinationPrefix "0.0.0.0/0"

Isso lhe daria o ifIndex para o adaptador que deveria estar conectado à internet. O mesmo ifIndex pode ser usado para obter o adaptador ...

Get-NetAdapter -InterfaceIndex <number from previous command>
    
por 03.11.2017 / 15:27