如果我在家庭网络上,如何测试我的脚本?

如果我在家庭网络上,如何测试我的脚本?

我需要在解锁计算机时运行一个批处理文件,其中的一部分需要测试我是否在家庭网络上。

我目前的解决方案是 ping 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 是否已启动。(如果在登录后 Wifi 连接,您的脚本可能会在 Wifi 实际工作之前启动。)
“ipconfig”输出(不带 /all 参数)将仅显示已启动的接口并提供默认网关的 ip 地址。

然后 ping 默认网关,它应该是您的路由器(我假设它始终处于打开状态)。
然后 grep“arp -a”的输出,查看路由器的 MAC 地址是否存在。(如果您同时使用有线和无线,请检查两个 MAC 地址。它们可能不一样。)
此 MAC 地址检查还可以捕获您在其他人的网络上的情况,而路由器恰好具有与您家中相同的 IP 地址。

而且没有必要延迟执行 4 次(我猜想这是为了让 HTPC 退出休眠状态)。只需向路由器发送 1 次 ping 操作(Windows 下会发送 4 次 ping 操作,延迟 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)

相关内容