检测设备何时加入无线网络(机场路由器)

检测设备何时加入无线网络(机场路由器)

我是转贴这个问题的描述更清楚,因为另一个问题已经关闭。不确定是否有其他方法可以做到这一点。

有没有办法检测设备何时通过 (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。当然,您可以让它在登录或启动时启动。

相关内容