Определение того, какой кабель Ethernet был подключен

Определение того, какой кабель Ethernet был подключен

У меня есть 2 кабеля Ethernet от разных интернет-провайдеров. Я хочу создать скрипт CMD (.bat), который бы определял, какой кабель подключен, а затем соответствующим образом менял бы настройки Ethernet.

У меня есть часть скрипта, которая меняет настройки. Как мне определить кабель?

: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) У вас есть предсказуемые настройки для каждого интернет-провайдера

2) Не нужно использовать 2 метки для каждой настройки провайдера

3) Заменять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/ & для %%i в (1,2 //> замените 1,2 на настоящее имя или IP
)выполнить "%__APPDIR__%ping.exe" -n 1dns.ser.ver.%%~i //> заменить для использования только переменной в цикле dns.serv.ver. %%i 
установить "_cmd_netsh=%__APPDIR__%netsh.exe interface 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

  • Этот вопрос предполагает, что вы хотите изменить фактические настройки кабеля с текущего на другого провайдера...

  • Итак, вы также можете сделать это с помощью более простого кода, например: да, возможно, это не так просто.


@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   

Пожалуйста, замените реальные IP-адреса DNS-серверов на DNS.SER.VER.1 и DNS.SER.VER.2.

Если первый пинг не находит DNS-сервер ISP-1, FIND выдает ошибку Errorlevel 1.
Если он ее находит, Errorlevel равен 0, поэтому вы получаете ответ Echo DNS SERVER ISP-1 UP,
а затем скрипт перенаправляет вас на CHANGE-ISP-1.

Если ping на DNS-сервер ISP-1 не проходит, то скрипт выполняет 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, вы увидите сообщение BOTH ISP CONNECTIONS FAIL и можете отправить системному оператору любое предупреждение по вашему желанию.

Связанный контент