如果我在家庭網路上,如何在腳本中進行測試?

如果我在家庭網路上,如何在腳本中進行測試?

當我解鎖電腦時,我需要運行批次文件,其中一部分需要測試我是否在我的家庭網路上。

我目前的解決方案包括對 HTPC 執行 ping 操作,並假設如果可以找到它,那麼我就在家了。我知道這不是最好的解決方案 - 對於初學者來說,如果 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 是否已啟動。 (如果登入後連接 Wifi,您的腳本可能會在 Wifi 實際工作之前啟動。)
「ipconfig」輸出(不含 /all 參數)將僅顯示處於 UP 狀態的接口,並提供預設的 IP 位址網關。

然後 ping 該預設網關,它應該是您的路由器(我假設它始終處於開啟狀態)。
然後 grep “arp -a”的輸出來查看路由器的 MAC 位址是否存在。 (如果您對兩個 MAC 位址同時使用有線和無線檢查。它們可能不相同。)
此 MAC 位址檢查還可以捕獲您在其他人的網路上且路由器碰巧具有相同 IP 位址的情況就像你在家裡一樣。

並且不需要延遲執行 4 次(我認為這是在需要時嘗試讓 HTPC 退出電源睡眠狀態)。只需對路由器執行 1 次 ping(在 Windows 下執行 4 次 ping,延遲 1 秒)就足夠了。
路由器要么會響應(這樣您就可以檢查 MAC),要么不響應,在這種情況下,網路確實出了問題,無論如何都無法使用。

下面的程式碼在 Windows 10 上進行了測試。

@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)

相關內容