¿Archivo por lotes o utilidad de vigilancia wifi?

¿Archivo por lotes o utilidad de vigilancia wifi?

Estoy ejecutando un antiguo sistema Windows 7 con wifi al que accedo de forma remota para monitorear.

El problema es que el wifi es impredecible (debido a problemas extraños con el enrutador) y necesito que este sistema esté en línea en cualquier momento del día. Curiosamente, cuando el wifi se cae, no tiende a reconectarse automáticamente a pesar de que todavía está disponible y Windows está configurado para volver a conectarse.

Encontré una pregunta similar con una respuesta aquí, pero era para una red cableada y, lamentablemente, la solución no funciona para mi sistema.

Es un archivo por lotes como se crea a continuación. Lo ejecuté, apagué el enrutador wifi que detuvo los pings, pero no completó la declaración if para restablecer la interfaz. La ventana de comando simplemente muestra que se agotó el tiempo de espera del ping y lo sigue repitiendo hasta que se restablece la conexión. El archivo de registro no registra un error, por lo que nunca llega a la parte de error de la declaración if. Cambié la var "Interfaz" original de "Conexión de área local" a "Conexión de red inalámbrica"

¿Alguien puede solucionar este problema o sugerir una opción alternativa para restablecer el adaptador automáticamente cuando la red se cae, ya que eso parece solucionarlo? ¿Necesito agregar "Conexión de red inalámbrica (%SSID%)" como interfaz?

¡Gracias!

Panterateama

@echo off
set INTERFACE="Local Area Connection"
set TIMEOUT=3600
set IP=8.8.8.8
set LOG="watchdog.log"

echo %DATE% %TIME%: Watchdog started >> %LOG%

:loop
rem First check the interface for an hour by pinging the Google DNS
rem and resetting the networking interface if it should fail.
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Connection failed. Restarting interface.. >> %LOG%
netsh interface set interface %INTERFACE% disable
netsh interface set interface %INTERFACE% enable

rem Give it another shot but restart the whole computer if it the 
communication should still fail
ping -n %TIMEOUT% -w 1000 -l 0 %IP%
if %errorlevel% NEQ 1 goto :loop
echo %DATE% %TIME%: Still no connection. Restarting computer.. >> %LOG%
shutdown /r /c "Internet wathchdog"

echo %DATE% %TIME%: Waiting for system to shut down >> %LOG%
choice /T %TIMEOUT% /D Y /N > NUL
echo %DATE% %TIME%: Gave up on the shut down attempt. Trying again.. >> 
%LOG%
goto :loop

Respuesta1

Cambie TIMEOUT a 30. Esto le indicará que realice el reinicio si la conexión ha estado inactiva durante 30 segundos. De lo contrario, tendrá que estar inactivo durante 3600 segundos (1 hora).

Además, no deberías utilizar 8.8.8.8 para este propósito. En su lugar, debería utilizar la dirección IP de su puerta de enlace que se encuentra con ipconfig. Si usa una IP externa como 8.8.8.8, su computadora restablecerá su conexión e incluso seguirá reiniciando su computadora si algo como Internet simplemente se cae.

Al utilizar una IP interna como la dirección de su puerta de enlace, solo se restablecerá o reiniciará cuando la conexión wifi realmente no funcione.

Además, puede ejecutar esto como una tarea programada para ejecutarla con los privilegios más altos al nt authority\systeminiciar la computadora. Pero cambiaría el tiempo de espera a algo un poco más largo, como 300 segundos, porque el script podría ejecutarse antes de que la pila de red esté completamente operativa.

EDITAR: Como se indica en los comentarios, el script publicado en la pregunta simplemente no funciona. El problema con el script original es que el comando ping puede devolver una "Respuesta de xxx.xxx.xxx.xxx: Host de destino inalcanzable", lo que da como resultado un nivel de error "exitoso".

A continuación se muestra un script actualizado que funciona y cambia la lógica para que detecte de manera más efectiva una conexión caída. También eliminé la parte que reiniciaría la computadora; creo que es innecesaria y potencialmente problemática. Tenga en cuenta que NO habrá resultados en la pantalla de este comando cuando se esté ejecutando. Asegúrese de haber obtenido el nombre de interfaz de red adecuado mediante el netsh interface show interfacecomando.

@echo off
REM Modified by Appleoddity - 10/11/2017
REM Fixed ping status check; Removed shutdown/reboot ability; Improved logging
REM This script MUST RUN AS ADMIN
REM
REM Obtain network interface name with 'netsh interface show interface'
REM 
REM Change the INTERFACE; THRESHOLD; IP; and LOG variables below.
REM Note: THRESHOLD is not necessarily the number of seconds before reset - but close
REM
setlocal EnableDelayedExpansion
set INTERFACE="Wi-Fi"
set THRESHOLD=30
set IP=10.1.10.1
set LOG="watchdog.log"

echo %DATE% %TIME%: Watchdog started >> %LOG%

SET /A COUNT=0
REM Loop until <THRESHOLD> failed, consecutive pings are counted
:LOOP
ping -n 1 -w 1000 -l 0 %IP% | find /i " bytes=" >NUL 2>&1
if errorlevel 1 (
    set /A COUNT+=1
    echo %DATE% %TIME%: Failed ping detected - Count = !COUNT!. >> %LOG%
) ELSE (
    set /A COUNT=0
    REM Pause
    ping -n 2 -w 1000 -l 0 127.0.0.1 >NUL 2>&1
)
if %COUNT% GEQ %THRESHOLD%  (
    echo %DATE% %TIME%: %THRESHOLD% failed pings exceeded. >> %LOG%
    GOTO RESET
)
GOTO LOOP

REM Reset the network interface
:RESET
echo %DATE% %TIME%: Restarting network interface - %INTERFACE% >> %LOG%
netsh interface set interface "%INTERFACE%" admin=DISABLED >NUL 2>&1
netsh interface set interface "%INTERFACE%" admin=ENABLED >NUL 2>&1
SET /A COUNT=0
GOTO LOOP

Respuesta2

Si estas consiguiendo"Una interfaz con ese nombre no está registrada en el enrutador"error, entonces significa que no está seleccionando el adaptador de red correcto en su secuencia de comandos.

¿Está ejecutando el lote/comando como administrador?

Si desea asegurarse de tener derechos de administrador, puede ejecutarncpa.cplo

netsh interface show interface

que le brinda una lista de adaptadores y luego escribe algo como esto, según los nombres de sus adaptadores:

netsh interface set interface name="Local area connection" admin="disabled"
netsh interface set interface name="Wireless Network Connection" admin="disabled"
netsh interface set interface name="Local area connection" admin="enabled"
netsh interface set interface name="Wireless Network Connection" admin="enabled"

Esto restablecerá el adaptador que necesita, además puede usar & para unirlos todos:

netsh interface set interface name="Local area connection" admin="disabled" & netsh interface set interface name="Local area connection" admin="enabled"

información relacionada