コンピュータのロックを解除するときにバッチ ファイルを実行する必要があり、その一部で、ホーム ネットワーク上にいるかどうかをテストする必要があります。
私が現在行っている解決策は、HTPC に ping を送信し、HTPC が見つかったら自宅にいると仮定することです。これが最善の解決策ではないことは承知しています。まず、HTPC がオフになっていると失敗します。
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]
これを行うより堅牢な方法はありますか?
答え1
行ったことあるよ、やったことあるよ。
まず、ネットワークが実際に接続されているかどうか、また TCPIP が稼働しているかどうかを確認/待機します。(ログイン後に Wi-Fi を接続する場合、Wi-Fi が実際に動作する前にスクリプトが開始する場合があります。)
「ipconfig」出力 (/all パラメータなし) は稼働しているインターフェイスのみを表示し、デフォルト ゲートウェイの IP アドレスを提供します。
次に、デフォルト ゲートウェイ (ルーターであるはずです (常にオンになっていると想定しています)) に ping を実行します。
次に、「arp -a」の出力を grep して、ルーターの MAC アドレスがそこにあるかどうかを確認します。(有線と無線の両方を使用している場合は、両方の MAC アドレスを確認します。おそらく同じではありません。)
この MAC アドレス チェックでは、ルーターの IP アドレスが自宅の IP アドレスと同じである場合など、他の人のネットワーク上にいる場合も検出されます。
また、遅延を伴ってこれを 4 回行う必要はありません (これは、必要に応じて HTPC を電源スリープ状態から解除しようとする試みだと思います)。ルーターへの ping を 1 回 (Windows では 1 秒の遅延で 4 回) 行うだけで十分です。
ルーターは応答するか (MAC を確認できます)、応答しない場合はネットワークに何らかの問題があり、いずれにしても使用できません。
以下のコードは Windows 10 でテストされています。どの 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)