让服务器识别特定移动设备(手机、iPad 等)何时连接到网络(当然是无线的)的最佳方法是什么?
举个例子,某人在手机上正确配置了家庭 wifi 网络。当他进入路由器的覆盖范围时,它就会连接(这没什么新鲜的)。连接到该路由器后,他的家庭服务器将启动某个程序(或发出通知、写入文件等)。
我认为一个可能的解决方案是网络托管的自定义“Web 应用程序”,该应用程序将从手机启动,以便服务器识别出已调用的页面。但是,如果可以在手机自动连接时执行此操作,那就最好了。
如有任何想法或替代解决方案,我们将不胜感激,提前致谢!
答案1
我认为这可以轻松实现arp-scan
。
安装arp-scan
:sudo 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
我实际上正在考虑实施一个满足以下要求的解决方案:
- 电话不需要在网络上分配 IP 地址。
- 手机不需要定期发出会耗尽电池的信号。
- 如果网络上有很多手机,那么所有手机都会被检测到。
我的目的是用 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 新手,因此需要对其进行清理,但我认为它说明了这个概念。