識別連接了哪條乙太網路電纜

識別連接了哪條乙太網路電纜

我有 2 條來自不同 ISP 的乙太網路電纜。我想建立一個 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 個標籤

3) 代替find /i ... errorlevelfindstr && || (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,需要對某些線路進行一些調整來處理實名/ipDNS.SER.VER.1 和 DNS.SER.VER.2。


cls & echo/ & 對於 %%i in (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 伺服器 IP 位址取代 DNS.SER.VER.1 和 DNS.SER.VER.2

如果第一個 ping 沒有找到 ISP-1 DNS 伺服器,FIND 會拋出錯誤等級 1

CHANGE-ISP -1

如果 ping ISP-1 DNS 伺服器失敗,則腳本執行 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 連線都失敗,並且可以向​​管理員執行您想要的任何警告。

相關內容