Necesito ejecutar un archivo por lotes cuando desbloqueo la computadora y, en 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]
¿Hay una forma más robusta de hacer esto?
windows
networking
batch
shell-script
Richard
fuente
fuente
arp -a
Respuestas:
He estado allí, hecho eso.
Primero verifique / espere si su red está realmente conectada en el primer lugar y si tiene TCPIP activado. (En el caso de que la conexión de Wi-Fi se realice después del inicio de sesión, es posible que su secuencia de comandos comience antes de que realmente funcione.)
La salida "ipconfig" (SIN el parámetro / all) solo mostrará las interfaces que estén UP y la dirección IP de la puerta de enlace predeterminada.
Luego haga ping a la puerta de enlace predeterminada, que debería ser su enrutador (supongo que siempre está encendido).
Luego grep la salida de "arp -a" para ver si la dirección MAC de su enrutador está allí. (Si utiliza tanto la verificación por cable como la inalámbrica para 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 donde el enrutador tiene la misma dirección IP que tiene en casa.
Y no hay necesidad de hacer esto 4 veces con retrasos (supongo que es un intento de que el HTPC deje de estar en modo de suspensión si es necesario). Solo 1 ping (que bajo Windows hace 4 pings con 1 segundo de retraso de todos modos) al enrutador es suficiente.
El enrutador responderá (para que pueda verificar el MAC) o no lo hace, en cuyo caso algo está realmente mal con la red y, de todos modos, es inutilizable.
El código a continuación se prueba en Windows 10. Estoy bastante seguro de que funcionará en cualquier versión de Windows NT.
fuente
set delayedexpansion=on
sersetlocal EnableDelayedExpansion
? Las versiones recientes de Windows tienenGetmax.exe
para recuperar el MAC.