Identifizieren, welches Ethernet-Kabel angeschlossen war

Identifizieren, welches Ethernet-Kabel angeschlossen war

Ich habe zwei Ethernet-Kabel von unterschiedlichen ISPs. Ich möchte ein CMD-Skript (.bat) erstellen, das herausfindet, welches Kabel angeschlossen ist, und dann die Ethernet-Einstellungen entsprechend ändert.

Ich habe den Skriptteil, der die Einstellungen ändert. Wie kann ich das Kabel identifizieren?

: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

Antwort1


1) Sie haben vorhersehbare Einstellungen für jeden ISP

2) Sie müssen nicht zwei Labels für jede ISP-Einstellung verwenden

3) Ersetzenfind /i ... errorlevelZufindstr && || (operators)

4) Ersetzen Sie Ihre Etiketten durchif...() 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

Damit das für Sie klappt mitechter Name/IP, einige Anpassungen an einigen Zeilen sind erforderlich, um mit echten Namen/IP umzugehen fürDNS.SER.VER.1 und DNS.SER.VER.2.


cls & echo/ & für %%i in (1,2 ///> Ersetzen Sie 1,2 durch den tatsächlichen Namen oder die IP
)do "%__APPDIR__%ping.exe" -n 1dns.ser.ver.%%~i //> Ersetzen Sie dies, um nur die Variable in der Schleife dns.ser.ver. %%i zu verwenden. 
setze "_cmd_netsh=%__APPDIR__%netsh.exe Schnittstelle IPv4" && wenn nicht "!_isp_srv!" =="1" ( //> ersetzen Sie "1" durch den tatsächlichen Namen für DNS.SERV.VER.1
)|| echo/ DNSISP-%%i //> Ersetzen durch die Variable in der Schleife %%i
& wenn "%%~i" =="2" //> ersetzen durch den realen Namen für DNS.SERV.VER.2

  • Der gleiche Code in"konventionelle Formatierung"
@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

  • Diese Frage lässt darauf schließen, dass Sie die aktuellen Kabeleinstellungen vom aktuellen zu einem anderen ISP ändern möchten …

  • Sie können dies also auch mit einfacherem Code tun, etwa: Ja, vielleicht ist es nicht so einfach.


@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

Entschuldigung, meine begrenzteEnglisch

Antwort2

Hier ist etwas Pseudocode von Crude Hacks 'R Us, der die Überprüfung veranschaulicht:

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   

Ersetzen Sie DNS.SER.VER.1 und DNS.SER.VER.2 durch die echten DNS-Server-IP-Adressen.

Wenn der erste Ping den DNS-Server von ISP-1 nicht findet, gibt FIND einen Errorlevel 1 aus.
Wenn er gefunden wird, ist der Errorlevel 0, sodass Sie ein Echo DNS SERVER ISP-1 UP erhalten.
Anschließend leitet das Skript Sie zu CHANGE-ISP-1 weiter.

Wenn der Ping zum DNS-Server von ISP-1 fehlschlägt, führt das Skript einen Ping DNS.SER.VER.2 | find /I "TTL" aus.
Wenn es ISP-2 findet, ist der Fehlerlevel 0 und Sie sehen DNS SERVER ISP-2 UP.
Das Skript leitet Sie dann zu CHANGE-ISP-2 weiter.

Wenn Sie zu diesem Zeitpunkt weder zu CHANGE-ISP-1 noch zu CHANGE-ISP-2 umgeleitet wurden, wird Ihnen „BEIDE ISP-VERBINDUNGEN FEHLGESCHLAGEN“ angezeigt und Sie können dem Sysop jede gewünschte Warnung senden.

verwandte Informationen