홈 네트워크에 있는 경우 스크립트에서 어떻게 테스트합니까?

홈 네트워크에 있는 경우 스크립트에서 어떻게 테스트합니까?

컴퓨터 잠금을 해제할 때 배치 파일을 실행해야 하며 그 중 일부는 홈 네트워크에 있는지 여부를 테스트해야 합니다.

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 주소를 제공합니다. 게이트웨이.

그런 다음 라우터가 되어야 하는 기본 게이트웨이를 핑합니다(항상 켜져 있다고 가정합니다).
그런 다음 "arp -a"의 출력을 grep하여 라우터의 MAC 주소가 있는지 확인하세요. (두 MAC 주소에 대해 유선 및 무선 확인을 모두 사용하는 경우 아마도 동일하지 않을 수 있습니다.)
이 MAC 주소 확인은 또한 라우터가 동일한 IP 주소를 갖는 다른 사람의 네트워크에 있는 경우도 포착합니다. 집에서 그랬던 것처럼.

그리고 지연을 사용하여 이 작업을 4번 수행할 필요가 없습니다(필요한 경우 HTPC를 절전 모드에서 해제하려는 시도인 것으로 추정됩니다). 라우터에 대한 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)

관련 정보