这种项目以前已经通过蓝牙完成,但是30英尺的范围和额外的电池消耗使我只想对路由器而不是人们的电话进行ping操作。我知道路由器会跟踪每个设备的唯一MAC地址。我希望注册每个电话的地址,并让PI定期检查路由器以更新动态网页以显示谁在家里。
我想知道是否有合理的方法可以通过PI提取此信息。
这种项目以前已经通过蓝牙完成,但是30英尺的范围和额外的电池消耗使我只想对路由器而不是人们的电话进行ping操作。我知道路由器会跟踪每个设备的唯一MAC地址。我希望注册每个电话的地址,并让PI定期检查路由器以更新动态网页以显示谁在家里。
我想知道是否有合理的方法可以通过PI提取此信息。
Answers:
有可能的。建议您为脚本提供登录凭据,并阅读显示信息的页面。然后,您可以解析其内容,并用所需的数据填充数组。由于这些页面有时包含诸如日期和时间之类的更多信息,因此您可以构建一个非常好的日志。
这是有关我将如何进行的简单示例;
在路由器页面上,您可以找到以下内容:
<div id="flex">
<div id="dm-name">
name : Your_device_name
</div>
<div id="dm-ip">
IP : 192.168.x.xxx
</div>
<div id="dm-mac">
<span>MAC:D4:04:CD:FE:5A:17</span>
</div>
</div>
因此,我们知道所有设备都会像这样列出。并且所有MAC地址都将具有相同的长度。
脚本可能是这样的。
var string_to_parse = "file read from router.html";
cursor = 0; // The position of your cursor;
i =0;
while(cursor > 0){
begin_at = string_to_parse.indeOf('MAC:');
end_at = length_of_Mac; // this is standard for al mac
mac[i] = string_to_parse.substring(begin_at, begin_at + end_at);
cursor = begin_at + end_at;
i++;
}
这段代码将需要调整,但是想法就在那里。它是一个循环,它将运行所有文件以查找所有Mac地址。直到到达文件末尾。
为了在Raspberry Pi上跟踪唯一的mac地址,您需要一个名为arpwatch的工具(服务)。我已经在BSD上广泛使用arpwatch,它将所有arp和rarp请求记录到syslog中。
在Syslog中,您可以解析日期和时间以及mac地址。
ARP起作用并且表仅存在于物理网络上(技术词:冲突域)。当数据包离开另一个网络时,源MAC地址将替换为路由器的MAC地址。
arp
在Raspberry Pi上运行命令将仅列出与运行该命令的主机(Raspberry Pi)进行过交易(IP通信)的主机的mac + IP地址。它不会列出网络上其他主机的mac地址。
另一种高级方法是在Raspberry Pi上使用nmap进行主机发现。您可以nmap -sP
用来ping网络上的所有主机。它会告诉您网络上所有活动主机的IP地址。然后,您可以运行arp命令以找出谁是活跃用户。
chetan@Linux:~$ nmap -sP 192.168.100.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2016-02-23 16:08 PST
Nmap scan report for 192.168.100.4
Host is up (0.0087s latency).
Nmap scan report for 192.168.100.58
Host is up (0.0024s latency).
Nmap scan report for 192.168.100.160
Host is up (0.049s latency).
Nmap scan report for 192.168.100.164
Host is up (0.063s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.68 seconds
该命令arp
将为您提供连接到网络的设备的列表。您将需要进行一些基本的字符串操作才能获取所需的数据,但这肯定比尝试自己获取信息要容易。
功能说明:
某些路由器默认情况下会阻止此类功能,您的路由器可能已配置为此类。如果它不起作用,请仔细阅读它的文档以检查如何允许它。
安全注意事项:
建立一个显示谁当前住所的网站会对安全产生非常严重的影响。请非常仔细地考虑现有的安全性,以及它是否足以应对所涉及的风险。