3

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

Мое текущее решение, включающее пинг 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 ответ1

3

Был там, сделал это.

Сначала проверьте / подождите, если ваша сеть действительно подключена в первую очередь, и если у вас есть TCPIP. (В случае подключения Wi-Fi после входа в систему ваш сценарий может запуститься до того, как Wifi начнет работать.)
Выходные данные "ipconfig" (БЕЗ параметра / all) будут отображать только те интерфейсы, которые имеют ВВЕРХ, и предоставят ip-адрес шлюза по умолчанию.

Затем пропингуйте этот шлюз по умолчанию, который должен быть вашим маршрутизатором (я предполагаю, что он всегда включен).
Затем выполните 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .