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