Как мне проверить в своем скрипте, нахожусь ли я в домашней сети?

Как мне проверить в своем скрипте, нахожусь ли я в домашней сети?

Мне нужно запустить пакетный файл, когда я разблокирую компьютер, и, в частности, он должен проверить, подключен ли я к домашней сети.

Мое текущее решение включает пингование 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 этого шлюза по умолчанию, который должен быть вашим маршрутизатором (я предполагаю, что он всегда включен).
Затем выполните grep вывода "arp -a", чтобы увидеть, есть ли там MAC-адрес вашего маршрутизатора. (Если вы используете и проводное, и беспроводное соединение, проверьте оба MAC-адреса. Они, вероятно, НЕ одинаковы.)
Эта проверка MAC-адреса также выявляет случай, когда вы находитесь в чьей-то чужой сети, где маршрутизатор имеет тот же IP-адрес, что и у вас дома.

И нет необходимости делать это 4 раза с задержками (я предполагаю, что это попытка вывести HTPC из спящего режима, если это необходимо). Достаточно одного пинга (который в Windows в любом случае делает 4 пинга с задержкой в ​​1 секунду) на маршрутизатор. Маршрутизатор
либо ответит (чтобы вы могли проверить 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)

Связанный контент