我是转贴这个问题的描述更清楚,因为另一个问题已经关闭。不确定是否有其他方法可以做到这一点。
有没有办法检测设备何时通过 (mac) 终端加入我的网络。我想在我回家时触发某些操作,并希望使用我的手机连接到 wifi 时作为触发器。
我意识到当我在家时它会连接/断开连接,所以我打算尝试在软件中过滤掉它们,但现在有没有办法嗅探到哪些设备正在运行。
我不介意只查找 MAC 地址。我宁愿不必越狱手机来解决问题。
我有一个时间胶囊(本质上是一个极端机场)作为我的路由器。
答案1
这样做即使有可能,也可能非常困难。根据您的硬件、要求和技能,寻找某种“解决方法”可能更有意义。
一个想法是确保您的手机 WIFI 连接始终分配一个特定的 IP 地址(静态寻址或让 Wifi 路由器动态分配静态 IP),然后运行定期脚本(MAC 上的 Cronjob?)ping 您的手机并寻找响应 [或如果没有响应,则将其 MAC 地址添加到您的 arp 缓存中]。这可能是最简单的解决方案。
推测 [ 我没有 Apple 产品并且从未使用过 WIFI 设备的 Radius 身份验证 ],另一种方法可能是升级/重新配置你的路由器以对你的 WIFI 连接进行 Radius 身份验证,在你的 Mac 上运行 Radius 服务器并让它触发你想要在连接时运行的脚本。
答案2
我能想到的唯一选择是 iPhone 上的一个应用程序,它知道它什么时候在家。iOS 4 添加了后台位置服务具有基于形状的区域(有时也称为地理围栏)。该应用程序可以配置为调用您的服务器来触发您想要的行为。
当然,这个应用程序必须先编写好,然后得到苹果的批准或者在你的手机上以测试模式运行。
答案3
使用 Windows 版本的 Airport Utility,您可以启用系统日志。我确信有一个系统日志实用程序,当传输某些日志时会创建操作。当计算机登录时,设置与该系统日志相对应的操作。
答案4
我使用与此类似的 PHP“shell”脚本,从终端启动以测试一个或多个设备是否已关闭/断开连接。我使用它来监控 Wifi 桥是否已关闭(如果它看不到桥另一侧设备的 MAC 地址,则假设它已关闭):
#!/usr/bin/php
<?php
$MULTICAST_ADDR='192.168.99.255';
$DEVICES_TO_TEST_FOR_BRIDGE=array( // list of MACs
'XX:XX:63:f2:XX:XX',
'XX:XX:d0:ad:XX:XX',
'XX:XX:b9:eb:XX:XX'
);
$SLEEP=10000000; // one sec = 1000000, sleep before reconnect
while(TRUE) {
usleep($SLEEP);
flush();
`ping -b -c 3 -t 3 $MULTICAST_ADDR 2> /dev/null`;
flush();
$res=`arp -an`;
$bridgeIsOn=FALSE;
echo("DEVICES:\n");
echo($res);
echo("\n");
foreach($DEVICES_TO_TEST_FOR_BRIDGE as $deviceToTestForBridge) {
if (strpos($res, $deviceToTestForBridge) !== false) {
$bridgeIsOn=TRUE;
$lastBridgeOn=time();
}
}
if(!$bridgeIsOn && (time()-$lastBridgeOn>5*60) ) { // If bridge is down for 5 minutes
echo(" BRIDGE HAS BEEN OFF FOR LONG (".(time()-$lastBridgeOn)."s) - REQUESTING A RESTART\n");
// Do something here
}
}
它的作用就像在终端中输入
ping -b -c 3 -t 3 192.168.99.255 2> /dev/null
我的设备在 192.168.99.xxx 范围内,.255 表示“所有设备”。因此,请 ping 所有设备并忽略回复。
然后使用命令读取 arp 表
arp -an
代码的其余部分是将列表与我想要的设备进行比较。在循环结束时,$bridgeIsOn 为 TRUE 或 FALSE,而 $lastBridgeOn 具有上次看到的时间,因此我可以做出选择并执行操作。在您的例子中,您必须恢复逻辑,$bridgeIsOn 表示您的手机已连接到网络:if($bridgeIsOn) { /* do something */}
我将脚本保存为“monitorbridge”,使其可执行并在终端中启动它
./monitorbridge
脚本会一直运行,直到我关闭终端或输入 ^C。当然,您可以让它在登录或启动时启动。