当移动设备连接到家庭 WiFi 网络时如何检测它?

当移动设备连接到家庭 WiFi 网络时如何检测它?

让服务器识别特定移动设备(手机、iPad 等)何时连接到网络(当然是无线的)的最佳方法是什么?

举个例子,某人在手机上正确配置了家庭 wifi 网络。当他进入路由器的覆盖范围时,它就会连接(这没什么新鲜的)。连接到该路由器后,他的家庭服务器将启动某个程序(或发出通知、写入文件等)。

我认为一个可能的解决方案是网络托管的自定义“Web 应用程序”,该应用程序将从手机启动,以便服务器识别出已调用的页面。但是,如果可以在手机自动连接时执行此操作,那就最好了。

如有任何想法或替代解决方案,我们将不胜感激,提前致谢!

答案1

我认为这可以轻松实现arp-scan

安装arp-scansudo apt-get install arp-scan
检测本地网络上的所有主机:sudo arp-scan -l

您可以设置一个 crontab 来定期(可能每 2 分钟)运行一个脚本,使用 arp-scan 扫描网络并解析其输出以发现活动主机。

有时我需要-r 3运行三次的标志;默认的 2 次效果更好,有时会错过一些设备。因此:

 sudo arp-scan -l -r 3 | grep {Phone Static Assigned IP} 

对我来说,它比 LG V30+ 更好用。

答案2

import subprocess

if __name__ == '__main__':
    while True:
        sleep(5)
        p = subprocess.Popen("arp-scan -l | grep xx:xx:xx:xx:xx:xx", stdout=subprocess.PIPE, shell=True)
        (output, err) = p.communicate()
        p_status = p.wait()
        if output:
            print "Yay, the devine is connected to your network!"
        else:
            print "The device is not present!"

这样你就可以扫描你的设备的MAC地址:)

答案3

我实际上正在考虑实施一个满足以下要求的解决方案:

  1. 电话不需要在网络上分配 IP 地址。
  2. 手机不需要定期发出会耗尽电池的信号。
  3. 如果网络上有很多手机,那么所有手机都会被检测到。

我的目的是用 ssh 安装手机文件系统,但它可以用于任何事情。

假设本地网络是 192.168.1.0...

因此,我将实现一个应用程序,用于监听来自广播地址的 UDP 广播:192.168.1.255。此应​​用程序不会耗尽电池,因为它完全是被动的。(只有在收到数据包时才会激活)。

计算机上的守护程序将定期向广播地址发送广播192.168.1.255。手机将回复此类信号,并提供其名称、ID、IP 地址等。

现在计算机知道手机存在于网络上,并且就我而言可以调用 sshfs mount。

当然这需要很多工作,包括编程工作,而且并不容易。但我认为这是最可靠和最合理的解决方案。

答案4

我编写了一个脚本,使用 arp-scan 和 iPhone 上的静态 IP 地址执行类似的操作。

您可以在这里找到代码:https://github.com/blackairplane/pydetect

由于我是 Python 新手,因此需要对其进行清理,但我认为它说明了这个概念。

相关内容