从 MAC 地址获取 IP 地址

4

在本地网络中,是否可以通过MAC地址确定设备的IP地址?如果可以的话,我想能够通过命令行完成此操作。

我需要将我的树莓派连接到学校的无线网络,并通过ssh/vnc进行访问,但我不想带外围设备(鼠标、键盘、显示器)来检查其被动态分配的IP地址。


如果您在同一网络中,可以使用“fping”来ping所有子网(例如192.168.1.0/24),然后使用“arp -a”从Mac中检索IP地址。但是,为Rpi使用固定的IP地址会更容易。 - user2196728
这个回答解决了你的问题吗?我能通过已知的MAC地址确定当前的IP地址吗? - undefined
6个回答

1

你需要使用ARP协议。

首先获取你的局域网广播地址(你可以使用以下方法找到它:

ifconfig

然后ping该地址以刷新系统的ARP表(所有邻居都会回答)

ping -b -c1 BROADCAST_IP_ADDRESS

现在您可以使用 arp -a 命令并查找 IP 地址:
arp -a

您可以使用自动化来完成此操作

arp -a | grep MAC_ADRESS | cut -f2 | tr -d '()'

尝试第二行使用-b和-c1会返回“错误的选项”。有任何想法吗? - jake_feyereisen

0

我刚刚编写了一个PowerShell脚本来实现这个功能,当我在研究时来到这个论坛和其他一些论坛(它适用于Windows,如果你能将ps转换为batch,它应该可以在两者上运行,Windows批处理与Linux批处理大部分相同,只有一些语法差异):

<# enter subnet range here#>
$iprange = 100..250

<#ping address range- this forces an addition of the connected device to 
 the arp table#>
Foreach ($ip in $iprange)
{
  $computer = "192.168.1.$ip"
  ping $computer
}

$mac="Put Mac address here"
$ip=arp -a | select-string $mac |% { $_.ToString().Trim().Split(" ")[0] }

"$mac has an ip of $ip"

0
你可以使用类似 airodump-ng 或 wireshark 这样的工具来扫描 MAC 地址并获取 IP。
或者,你也可以查看 ARP -a。

0

我的第一个想法是让您使用RARP协议。这似乎已经过时,并且可能未启用您的树莓派TCP/IP堆栈。稍微调整一下您的Raspi配置,看看是否可以启用它。然后,从另一个Linux框中,您可以发出命令rarp -a


0

这是一篇旧帖子,但最近我需要它。

我尝试对本地网络上的所有设备进行ping操作,这代表了65k+不同的IP地址。我设法使用start命令批量并行启动ping,但是由于有太多的命令,它很快就变成了一堆打开和关闭的命令提示符,并且似乎对我的笔记本电脑来说足够糟糕。

然后,我尝试了Java及其isReachable()方法,该方法尝试进行ping操作。将其封装在一个固定的线程池中,然后再次尝试... ping完成,arp -a给出了IP地址...我尝试第二次,arp-a没有任何结果...什么鬼

非常重要的一点是,如果您想扫描您的网络,请在每次ping之后检查您所需的IP的arp表。在Java中,我成功地在大约30秒内扫描了所有60k+ IP地址,并且无法通过批处理做得更好...因为是在Windows中执行的。

希望能对某人有所帮助...


现在,对于一个默认的/64 IPv6网络来说,它有18,446,744,073,709,551,615个可能的地址。以你观察到的每秒2000个地址的明显速度计算,这将需要超过292,271,023年的时间! - Ron Maupin
是的,很有趣,但这是基于IPv4的,在这方面回答了提出的问题,而我之前没有找到完整的答案。30秒是相对于系统可以处理的线程数而言的。因此,如果您的系统可以处理18,446,744,073,709,551,615个线程或者一些大分数,它可能会更快。即使在我的系统上,我也将线程数限制在200个。那么这里的重点是什么?您知道一种更可靠的方法来查找机器MAC地址所对应的IP地址吗? - eaz

0

使用 ifconfig 命令

  ifconfig | grep "inet " | grep -v 127.0.0.1

仅使用 ifconfig 就可以给出整个细节列表,以便过滤正确的 IP 地址。使用 grep inet 来缩小搜索范围。
这里的 -v 意味着“反转匹配的意义”。避免在搜索条件中包含关键字 127.0.0.1 的行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接