自宅のネットワーク上にいる場合、スクリプトでテストするにはどうすればよいですか?

自宅のネットワーク上にいる場合、スクリプトでテストするにはどうすればよいですか?

コンピュータのロックを解除するときにバッチ ファイルを実行する必要があり、その一部で、ホーム ネットワーク上にいるかどうかをテストする必要があります。

私が現在行っている解決策は、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)

関連情報