Como faço para testar no meu script se estou na minha rede doméstica?

Como faço para testar no meu script se estou na minha rede doméstica?

Preciso executar um arquivo em lote ao desbloquear o computador e, em parte, ele precisa testar se estou ou não na minha rede doméstica.

Minha solução atual envolve executar ping no HTPC e presumir que, se ele puder ser encontrado, estarei em casa. Estou ciente de que esta não é a melhor solução - para começar, se o HTPC estiver desligado, ele falhará.

rem Ping the HTPC 4 times, pausing every 5 seconds.
for /l %%A in (1,1,4) do (
    timeout 5 >NUL
    ping MyHTPC -n 3 | find "TTL=" > NUL
    if not ERRORLEVEL 1 goto working
)
rem The HTPC cannot be found, so we're probably somewhere else    
[other code here]
exit

:working
rem The HTPC can be found, so we're probably at home
[other code here]

Existe uma maneira mais robusta de fazer isso?

Responder1

Estive lá, fiz isso.

Primeiro verifique/espere se a sua rede está realmente conectada e se você tem o TCPIP ativado. (No caso de conexão Wifi após o login, seu script pode iniciar antes que o Wifi esteja realmente funcionando.)
A saída "ipconfig" (SEM o parâmetro /all) mostrará apenas interfaces que estão UP e fornecerá o endereço IP do padrão Porta de entrada.

Em seguida, execute ping no gateway padrão, que deve ser o seu roteador (presumo que esteja sempre ativado).
Em seguida, execute grep na saída de "arp -a" para ver se o endereço MAC do seu roteador está lá. (Se você usar a verificação com e sem fio para ambos os endereços MAC. Eles provavelmente NÃO são iguais.)
Essa verificação de endereço MAC também detecta o caso em que você está na rede de outra pessoa, onde o roteador tem o mesmo endereço IP como você tem em casa.

E não há necessidade de fazer isso 4 vezes com atrasos (presumo que seja uma tentativa de tirar o HTPC do modo de espera, se necessário). Apenas 1 ping (que no Windows faz 4 pings com 1 segundo de atraso) para o roteador é suficiente.
O roteador responderá (para que você possa verificar o MAC) ou não. Nesse caso, algo está realmente errado com a rede e ela ficará inutilizável de qualquer maneira.

O código abaixo foi testado no Windows 10. Tenho quase certeza de que funcionará em qualquer versão do Windows NT.

@echo off
set mymac=ac-9e-17-96-6e-60

set delayedexpansion=on

rem Pull the default gateways from ipconfig and extract the one with a value.
rem Carefull! There is 1 extra space before the ip-address.

for /F "delims=: tokens=2 usebackq" %%a in ( `ipconfig ^| find /I "default gateway"` ) do (
  if NOT "%%a."==" ." set IP=%%a
)
echo Default gateway:%IP%

rem Ping it to make sure it appears in arp -a output
ping -n 1 %IP% >nul

rem Filter the line with the ip-address and MAC from arp -a and take action if found
arp -a | find /I "%IP%" | find /I "%mymac%"
if errorlevel 1 (echo Not found: Not at home) else ( echo I'm at home)

informação relacionada