识别连接的是哪条以太网电缆

识别连接的是哪条以太网电缆

我有 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 在 (1,2 //> 将1,2替换为真实姓名或IP
)执行“%__APPDIR__%ping.exe”-n 1dns.ser.ver.%%~i //> 替换循环中仅使用变量的dns.ser.ver. %%i 
设置“_cmd_netsh=%__APPDIR__%netsh.exe 接口 ipv4”&&如果不是“!_isp_srv!”==“1”(//> 将“1”替换为DNS.SER.VER.1的真实名称
)|| 回显/ DNSISP-%%i //> 替换为循环中的变量 %%i
& 如果 "%%~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。
如果找到了,错误级别为 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 连接都失败,并且可以对系统操作员执行您希望的任何警告。

相关内容