¿Cómo pruebo mi script si estoy en mi red doméstica?

¿Cómo pruebo mi script si estoy en mi red doméstica?

Necesito ejecutar un archivo por lotes cuando desbloqueo la computadora y, durante una parte, debe probar si estoy o no en mi red doméstica.

Mi solución actual implica hacer ping al HTPC y suponer que si se puede encontrar, entonces estoy en casa. Soy consciente de que esta no es la mejor solución; para empezar, si el HTPC está apagado, fallará.

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 una forma más sólida de hacer esto?

Respuesta1

Estuve allí, lo hice.

Primero verifique/espere si su red está realmente conectada en primer lugar y si tiene TCPIP activo. (En caso de que Wifi se conecte después de iniciar sesión, su secuencia de comandos puede iniciarse antes de que Wifi esté realmente funcionando).
La salida "ipconfig" (SIN el parámetro /all) solo mostrará las interfaces que estén activas y proporcionará la dirección IP predeterminada. puerta.

Luego haga ping a esa puerta de enlace predeterminada, que debería ser su enrutador (supongo que siempre está encendido).
Luego, busque la salida de "arp -a" para ver si la dirección MAC de su enrutador está allí. (Si utiliza ambas direcciones MAC, por cable e inalámbrica, verifique ambas direcciones MAC. Probablemente NO sean las mismas).
Esta verificación de la dirección MAC también detecta el caso en el que se encuentra en la red de otra persona y el enrutador tiene la misma dirección IP. como lo tienes en casa.

Y no es necesario hacer esto 4 veces con retrasos (supongo que es un intento de sacar el HTPC del estado de suspensión si es necesario). Sólo 1 ping (que en Windows hace 4 pings con un retraso de 1 segundo de todos modos) al enrutador es suficiente.
El enrutador responderá (para que pueda verificar la MAC) o no, en cuyo caso algo anda realmente mal con la red y de todos modos no se puede utilizar.

El código siguiente se prueba en Windows 10. Estoy bastante seguro de que funcionará en cualquier versión de 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)

información relacionada