Como definir a rota pelo endereço MAC no Windows?

4

É assim que muitos de nós definem uma rota no Windows:

route add 10.10.0.0 mask 255.255.0.0 10.77.77.1 if 58 -p

Na linha de comando 58 está o Índice de Interface (IF) e na maioria das vezes seu valor é constante para uma placa de interface de rede específica. Portanto, é possível criar um arquivo em lote CMD para automatizar a exclusão e a redefinição de todas as rotas de que ele precisa.

No entanto, no meu caso, eu tenho uma placa adaptadora Ethernet USB 3.0 para porta dupla Gigabit Ethernet, e seus IFs mudam toda vez que conecto à porta USB do meu notebook. O que eu faço, basta abrir um shell cmd , obter as identificações de interface atuais dando route print , abrir o arquivo em lotes CMD com editor de texto e alterar todo o IF antigo ( ex: 58 ) valores, salve e feche e, por fim, execute o arquivo em lotes CMD no shell.

Se houver uma maneira de definir uma rota apenas conhecendo o endereço MAC, não dependendo do IF - então o problema foi resolvido :) A solução pode ser um simples comando CMD de uma linha ( rota definida pelo MAC ), ou talvez primeiro obter o IF por MAC e definir a rota por IF ( definir rota por IF do MAC ).

Qualquer ajuda é muito apreciada!

    
por uzeyirs 10.09.2016 / 13:59

1 resposta

2

O próximo trecho de código mostra como fazer obter o IF por MAC usando FOR /F loop contra resultado de WMIC (Comando de Instrumentação de Gerenciamento do Windows) :

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion

set "_maca=AA:AA:AA:AA:AA:AA"            change to match your circumstances
set "_geta=InterfaceIndex^, MACAddress"    to keep next lines in reasonable length
set "_ifin="                               to ensure that '_ifin' variable is empty

for /F "tokens=1,*" %%G in ('
    WMIC NIC where "MACAddress='%_maca%'" get %_geta% 2^>NUL ^| find ":"
                            ') do set "_ifin=%%~G"

if defined _ifin (
        rem route command block here:
    route add 10.10.0.0 mask 255.255.0.0 10.77.77.1 if %_ifin% -p
) else (
    echo %_maca%: No Instance^(s^) Available.
)

Recursos (leitura obrigatória):

por 13.09.2016 / 02:15