어떤 이더넷 케이블이 연결되었는지 확인

어떤 이더넷 케이블이 연결되었는지 확인

별도의 ISP에서 제공하는 2개의 이더넷 케이블이 있습니다. 어떤 케이블이 연결되어 있는지 알아낸 다음 그에 따라 이더넷 설정을 변경하는 CMD(.bat) 스크립트를 만들고 싶습니다.

설정을 변경하는 스크립트 부분이 있습니다. 케이블을 어떻게 식별할 수 있나요?

: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

답변1


1) 각 ISP에 대해 예측 가능한 설정이 있습니다.

2) 각 ISP 설정에 2개의 라벨을 사용할 필요가 없습니다.

삼) 바꾸다find /i ... errorlevel에게findstr && || (operators)

4) 라벨을 다음으로 교체하세요.if...() 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

이것이 당신에게 도움이 되도록실명/IP, 실제 이름/IP를 처리하려면 일부 줄에 대한 일부 조정이 필요합니다.DNS.SER.VER.1 및 DNS.SER.VER.2.


cls & echo/ & for %%i(1,2 //> 1,2를 실명이나 IP로 바꿉니다.
) "%__APPDIR__%ping.exe" -n 1dns.ser.ver.%%~i //> dns.ser.ver 루프에서 변수만 사용하려면 교체하세요 . %%나 
"_cmd_netsh=%__APPDIR__%netsh.exe 인터페이스 ipv4"를 설정하고 "!_isp_srv!"가 아닌 경우 && =="1"( //> "1"을 DNS.SER.VER.1의 실제 이름으로 바꿉니다.
)|| 에코/DNSISP-%%i //> %%i 루프의 var로 교체
& "%%~i" ==인 경우"2" //> DNS.SER.VER.2의 실제 이름으로 바꿉니다.

  • 동일한 코드"기존 형식"
@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

  • 이 질문은 실제 케이블 설정을 현재 ISP에서 다른 ISP로 변경하고 싶다는 것을 의미합니다.

  • 따라서 다음과 같이 더 간단한 코드를 사용하여 이 작업을 수행할 수도 있습니다. 예, 어쩌면 그렇게 간단하지 않을 수도 있습니다.


@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

미안 내 한계영어

답변2

다음은 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   

DNS.SER.VER.1 및 DNS.SER.VER.2를 실제 DNS 서버 IP 주소로 대체하십시오.

첫 번째 핑에서 ISP-1 DNS 서버를 찾지 못하면 FIND는 오류 수준 1을 시작합니다.
찾으면 오류 수준은 0이므로 에코 DNS SERVER ISP-1 UP을 얻은
다음 스크립트에서 CHANGE-ISP로 이동합니다. -1

ISP-1 DNS 서버에 대한 ping이 실패하면 스크립트는 ping DNS.SER.VER.2 | find /I "TTL"
ISP-2를 찾으면 Errorlevel은 0이고 DNS SERVER ISP-2 UP이 표시
되면 스크립트는 CHANGE-ISP-2로 이동합니다.

이 시점에서 CHANGE-ISP-1 또는 CHANGE-ISP-2로 리디렉션되지 않은 경우 두 ISP 연결 실패가 표시되며 관리자에게 원하는 모든 경고를 수행할 수 있습니다.

관련 정보