arquivo em lote ou utilitário watchdog do wifi?

0

Estou executando um sistema antigo do Windows 7 em Wi-Fi que eu acesso remotamente para monitorar.

O problema é que o wifi é imprevisível (devido a problemas estranhos no roteador) e eu preciso que este sistema esteja on-line a qualquer hora do dia. Estranhamente, quando o wifi cai, ele não costuma se reconectar automaticamente, embora ainda esteja disponível e o Windows esteja configurado para reconectar-se a ele.

Encontrei uma pergunta semelhante com uma resposta aqui, mas foi para uma rede com fio e, infelizmente, a solução não funciona no meu sistema.

É um arquivo de lote conforme criado abaixo. Eu corri, matei o roteador wifi que parou os pings, mas ele não completou a instrução if para resetar a interface. A janela de comando simplesmente mostra o tempo limite do ping e continua repetindo até que a conexão seja restabelecida. O arquivo de log não registra um erro, portanto, ele nunca está chegando à parte do erro da instrução if. Eu mudei o "Interface" var original de "Local Area Connection" para "Wireless Network Connection"

Alguém pode solucionar isso ou sugerir uma opção alternativa para redefinir o adaptador automaticamente quando a rede cai, já que parece consertá-lo. Preciso adicionar "Conexão de rede sem fio (% SSID%)" como interface?

Obrigado!

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
    
por panterateama 11.10.2017 / 00:37

2 respostas

1

Mude o TIMEOUT para 30. Isso fará com que execute a redefinição se a conexão tiver sido interrompida por 30 segundos. Caso contrário, ele deve estar inativo por 3600 segundos (1 hora).

Além disso, você não deve usar o 8.8.8.8 para esse propósito. Em vez disso, você deve usar o endereço IP do seu gateway encontrado com ipconfig . Se você usa um IP externo como o 8.8.8.8, seu computador irá redefinir sua conexão e até mesmo reiniciar seu computador se algo como sua internet simplesmente cair.

Ao usar um IP interno como o endereço do seu gateway, ele só será reinicializado ou reinicializado quando a conexão Wi-Fi estiver desativada.

Além disso, você pode executar isso como uma tarefa agendada para executar com privilégios mais altos como nt authority\system na inicialização do computador. Mas, eu mudaria o tempo limite para algo um pouco mais longo, como 300 segundos, porque o script pode ser executado antes que sua pilha de rede esteja totalmente operacional.

EDITAR: Como afirmado nos comentários, o script publicado na pergunta simplesmente não funciona. O problema com o script original é que o comando ping pode retornar uma "Resposta de xxx.xxx.xxx.xxx: Host de destino inacessível", que resulta em um nível de erro "bem-sucedido".

Abaixo está um script atualizado que funciona e altera a lógica para que ele detecte com mais eficácia uma conexão inativa. Também removi a parte que reiniciava o computador - sinto que isso é desnecessário e potencialmente problemático. Observe que não haverá saída na tela deste comando quando ele estiver em execução. Certifique-se de que o nome correto da interface de rede tenha sido obtido usando o comando netsh interface show interface .

@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
    
por 11.10.2017 / 01:09
0

Se você estiver obtendo um erro "Uma interface com esse nome não está registrado com o roteador" , significa que você não está selecionando o adaptador de rede correto em seu script.

Você está executando o lote / comando como Admin?

Se você quiser ter certeza de ter direitos de administrador, poderá executar ncpa.cpl ou

netsh interface show interface

que fornece uma lista de adaptadores e, em seguida, escreve algo assim, com base nos nomes dos 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"

Isso redefinirá o adaptador que você precisa, além de poder usar & para reuni-los todos juntos:

netsh interface set interface name="Local area connection" admin="disabled" & netsh interface set interface name="Local area connection" admin="enabled"
    
por 11.10.2017 / 01:34