Ich muss beim Entsperren des Computers eine Batchdatei ausführen, die unter anderem testen muss, ob ich mich in meinem Heimnetzwerk befinde.
Meine derzeitige Lösung besteht darin, den HTPC anzupingen und davon auszugehen, dass ich zu Hause bin, wenn er gefunden wird. Mir ist bewusst, dass dies nicht die beste Lösung ist – wenn der HTPC ausgeschaltet ist, funktioniert er nicht.
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]
Gibt es eine robustere Möglichkeit, dies zu tun?
Antwort1
Kenne ich schon.
Prüfen/warten Sie zunächst, ob Ihr Netzwerk überhaupt verbunden ist und ob TCPIP aktiv ist. (Wenn nach der Anmeldung eine WLAN-Verbindung hergestellt wird, kann Ihr Skript gestartet werden, bevor das WLAN tatsächlich funktioniert.)
Die „ipconfig“-Ausgabe (OHNE den Parameter /all) zeigt nur Schnittstellen an, die aktiv sind, und stellt die IP-Adresse des Standard-Gateways bereit.
Pingen Sie dann dieses Standard-Gateway an, das Ihr Router sein sollte (ich gehe davon aus, dass es immer eingeschaltet ist).
Greppen Sie dann die Ausgabe von „arp -a“, um zu sehen, ob die MAC-Adresse Ihres Routers dort steht. (Wenn Sie sowohl kabelgebundene als auch kabellose Verbindung verwenden, prüfen Sie beide MAC-Adressen. Sie sind wahrscheinlich NICHT gleich.)
Diese Prüfung der MAC-Adresse erkennt auch den Fall, dass Sie sich im Netzwerk einer anderen Person befinden und der Router zufällig dieselbe IP-Adresse hat wie Sie zu Hause.
Und es ist nicht nötig, dies 4 Mal mit Verzögerungen durchzuführen (ich nehme an, dies ist ein Versuch, den HTPC bei Bedarf aus dem Ruhezustand zu holen). Nur 1 Ping (unter Windows werden ohnehin 4 Pings mit 1 Sekunde Verzögerung ausgeführt) an den Router reicht aus.
Der Router wird entweder antworten (so dass Sie die MAC überprüfen können) oder nicht. In diesem Fall stimmt etwas mit dem Netzwerk nicht und es ist ohnehin unbrauchbar.
Der folgende Code wurde unter Windows 10 getestet. Ich bin ziemlich sicher, dass er unter jeder Windows NT-Version funktioniert.
@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)