检查网络上是否存在 mac 地址仍然不起作用(ping -b 和 arp)

检查网络上是否存在 mac 地址仍然不起作用(ping -b 和 arp)

这是对我的帖子。

我有手机的 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>"

注意:您需要超级用户权限才能使用此脚本。

相关内容