Identificar qué cable Ethernet estaba conectado

Identificar qué cable Ethernet estaba conectado

Tengo 2 cables Ethernet provenientes de ISP separados. Quiero crear un script CMD (.bat) que averigüe qué cable estaba conectado y luego cambie la configuración de Ethernet en consecuencia.

Tengo la parte del script que cambia la configuración. ¿Cómo podría identificar el cable?

:CHANGE-ISP-1
  netsh interface ipv4 set address name="Ethernet 2" static 108.129.156.199 255.255.255.0 108.129.156.1 store=persistent
  netsh interface ipv4 set dnsservers name="Ethernet 2" source=static address="108.129.159.31" validate=no
  netsh interface ipv4 add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2
:CHANGE-ISP-2
  netsh interface ipv4 set address name="Ethernet 2" source=dhcp
  netsh interface ipv4 set dnsservers name="Ethernet 2" source=dhcp

Respuesta1


1) Tienes configuraciones predecibles para cada ISP

2) No es necesario utilizar 2 etiquetas para cada configuración de ISP

3) Reemplazarfind /i ... errorlevelafindstr && || (operators)

4) Reemplace sus etiquetas porif...() else ()...


@echo off && setlocal enabledelayedexpansion 

cls & echo/ & for %%i in (1,2
)do "%__APPDIR__%ping.exe" -n 1 dns.ser.ver.%%~i|%__APPDIR__%findstr.exe "TTL=" >nul && (
echo/ DNS ISP-%%~i ping/link status: UP^^!! && set "_isp_srv=%%~i" && goto :_change-isp_:
)|| echo/ DNS ISP-%%i ping/link status: DOWN^^!! & if "%%~i" == "2" endlocal && goto :EOF

:_change-isp_:
set "_cmd_netsh=%__APPDIR__%netsh.exe interface ipv4" && if not "!_isp_srv!" == "1" ( 
!_cmd_netsh! set address name="Ethernet 2" source=dhcp && !_cmd_netsh! set dnsservers name="Ethernet 2" source=dhcp 
) else (!_cmd_netsh! set address name="Ethernet 2" static 108.129.156.199 255.255.255.0 108.129.156.1 store=persistent
!_cmd_netsh! set dnsservers name="Ethernet 2" source=static address="108.129.159.31" validate=no
!_cmd_netsh! add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2 )

rem./ do more tasks here, after that add "endlocal" at the end:  ===^> && endlocal && goto :EOF

Para que esto funcione para ustednombre real/IP, se necesitan algunos ajustes en algunas líneas para tratar con nombres/ip reales paraDNS.SER.VER.1 y DNS.SER.VER.2.


cls & echo/ & para %%i en (1,2 ///> reemplaza 1,2 por nombre real o IP
)hacer "%__APPDIR__%ping.exe" -n 1dns.ser.ver.%%~i //> reemplazar para usar solo la variable en el bucle dns.ser.ver. %%i 
establezca "_cmd_netsh=%__APPDIR__%netsh.exe interfaz ipv4" && si no "!_isp_srv!" =="1" ( //> reemplaza "1" por el nombre real de DNS.SER.VER.1
)|| eco/DNSISP-%%i ///> reemplazar a la var en el bucle %%i
& si "%%~i" =="2" ///> reemplaza por el nombre real de DNS.SER.VER.2

  • El mismo código en"formato convencional"
@echo off && setlocal enabledelayedexpansion 

cls 
echo/ 

for %%i in (1,2) do (
   "%__APPDIR__%ping.exe" -n 1 dns.ser.ver.%%~i|%__APPDIR__%findstr.exe "TTL=" >nul && (
   echo/ DNS ISP-%%~i ping/link status: UP^^!!
   set "_isp_srv=%%~i"
   goto :_change-isp_:

  ) || (

   echo/ DNS ISP-%%i ping/link status: DOWN^^!!
   if "%%~i" == "2" endlocal && goto :EOF

  ) 
)

:_change-isp_:

set "_cmd_netsh=%__APPDIR__%netsh.exe interface ipv4"

if not "!_isp_srv!" == "1" ( 

     !_cmd_netsh! set address name="Ethernet 2" source=dhcp
     !_cmd_netsh! set dnsservers name="Ethernet 2" source=dhcp 

   ) else (

     !_cmd_netsh! set address name="Ethernet 2" static 108.129.156.199 
     255.255.255.0 108.129.156.1 store=persistent
     !_cmd_netsh! set dnsservers name="Ethernet 2" source=static 
     address="108.129.159.31" validate=no
     !_cmd_netsh! add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2

   )

rem./ do more tasks here, after that add "endlocal" at the end:  ===^> && endlocal && goto :EOF

  • Esta pregunta sugiere que desea cambiar la configuración real del cable del actual a otro ISP...

  • Entonces, también puedes hacer esto con un código más simple, como: sí, tal vez no sea tan simple.


@echo off && setlocal enabledelayedexpansion && cls & echo/ 

pushd %__APPDIR__% & set "_cmd_netsh=netsh.exe interface ipv4" && ping.exe -n 1 108.129.156.1|findstr "TTL=">nul && (
!_cmd_netsh! set address name="Ethernet 2" source=dhcp && !_cmd_netsh! set dnsservers name="Ethernet 2" source=dhcp
)||( !_cmd_netsh! set address name="Ethernet 2" static 108.129.156.199 255.255.255.0 108.129.156.1 store=persistent
!_cmd_netsh! set dnsservers name="Ethernet 2" source=static address="108.129.159.31" validate=no
!_cmd_netsh! add dnsservers name="Ethernet 2" address="108.129.159.33" validate=no index=2 )

podp & endlocal && goto :EOF

Lo siento mi limitadoInglés

Respuesta2

Aquí hay un pseudocódigo para ilustrar cómo verificar, presentado por Crude Hacks 'R Us:

ping DNS.SER.VER.1 | find /I "TTL"    
if not errorlevel 1 echo DNS ISP-1 UP    
if not errorlevel 1 GOTO CHANGE-ISP-1    
ping DNS.SER.VER.2 | find /I "TTL"     
if not errorlevel 1 echo DNS ISP-2 UP   
if not errorlevel 1 GOTO CHANGE-ISP-2  
echo BOTH ISP CONNECTIONS FAIL   

Sustituya las direcciones IP reales del servidor DNS por DNS.SER.VER.1 y DNS.SER.VER.2.

Si el primer ping no encuentra el servidor DNS ISP-1, FIND genera un nivel de error 1.
Si lo encuentra, el nivel de error es 0, por lo que obtiene un eco del SERVIDOR DNS ISP-1 ARRIBA y
luego el script lo lleva a CHANGE-ISP. -1

Si falla el ping al servidor DNS del ISP-1, el script realiza ping DNS.SER.VER.2 | busque /I "TTL"
Si encuentra ISP-2, entonces el nivel de error es 0 y ve SERVIDOR DNS ISP-2 ARRIBA,
entonces el script lo lleva a CHANGE-ISP-2.

Si en este punto no ha sido redirigido a CHANGE-ISP-1 o CHANGE-ISP-2, verá AMBAS CONEXIONES ISP FALLARON y podrá realizar cualquier advertencia al operador del sistema que desee.

información relacionada