这是对这我的帖子。
我有手机的 mac 地址(三星 Galaxy S9;虽然这没什么关系)。我想检查它是否在网络上。它没有静态 IP,所以我需要使用它的 mac 地址来检查它。
我将使用 来引用我手机的 mac 地址[1]
。
- 在我的手机上,网络的随机 MAC 地址已关闭(之前的帖子中没有这种情况)。以前每次连接到我的网络时,它都会生成一个随机 MAC 地址,但现在不会了。
- 这是我检查 mac 地址是否存在于网络上的方法:
ping -b 192.168.2.255 -c 20 arp | grep -i "[1]"
这是事件的“日志”:
#phone connected to network
ping -b 192.168.2.255 -c 20 &> /dev/null
arp | grep -i "[1]"
-> successful
#phone NOT connected to network (turned of wifi on phone)
ping -b 192.168.2.255 -c 20 &> /dev/null
arp | grep -i "[1]"
-> successful
第二次应该不会成功。手机没有连接到网络,但它仍然在 arp 输出中显示它。
我的手机没有静态 IP 地址,但当它连接到网络时,它几乎总是获得相同的 IP 地址。这很好。输出ping -b
一直是正确的。当我的手机连接到网络时,我在命令列表中看到它几乎总是获得的 IP 地址ping
。当我的手机未连接时,我从未在输出中看到它的“标准”IP 地址。因此 ping 有效并且是“最新的”。
因此,我假设 arp 不像 ping 那样“最新”(但这只是我的猜测)。我认为 arp 不会更新其表,即使 ping 已经“创建”了新表。但这是我根据上一篇文章的评论得出的想法:“您已在执行广播 ping,ping -b 192.168.2.255。这应该会为所有 IP 地址为 192.168.2 的在线设备重新填充 arp 表。.*”
帮助!
答案1
如果你正在使用地址解析协议表来确定你的手机是否连接到网络,你必须删除手机的地址解析协议从你的电脑输入地址解析协议表。否则,您将无法确定变化,因为先前的条目仍然保持不变。
您可以删除特定的地址解析协议使用 命令 输入arp -d <IP_ADDR>
,使用 删除所有条目sudo ip neigh flush all
。
但是,我认为你应该使用nmap进行扫描,此外你不需要清理地址解析协议表。您可以使用此脚本。
#!/bin/bash
mac="$1"
# Scanning network, and obtaining IP address of specfied MAC address, if exists.
PHONEIP=$(sudo nmap -sP -n 192.168.2.0/24 | grep -B2 "$mac" | grep -Eoi "192\.168\.2\.[0-9]+")
if [[ $PHONEIP == "" ]];then
echo "$MAC not found."
else
echo "$MAC found at $PHONEIP"
fi
但是您必须将手机的 MAC 地址作为第一个参数,或者您可以将该行更改mac="$1"
为mac="<your-phone-mac>"
。
注意:您需要超级用户权限才能使用此脚本。