在本地网络中,是否可以通过MAC地址确定设备的IP地址?如果可以的话,我想能够通过命令行完成此操作。
我需要将我的树莓派连接到学校的无线网络,并通过ssh/vnc进行访问,但我不想带外围设备(鼠标、键盘、显示器)来检查其被动态分配的IP地址。
在本地网络中,是否可以通过MAC地址确定设备的IP地址?如果可以的话,我想能够通过命令行完成此操作。
我需要将我的树莓派连接到学校的无线网络,并通过ssh/vnc进行访问,但我不想带外围设备(鼠标、键盘、显示器)来检查其被动态分配的IP地址。
你需要使用ARP协议。
首先获取你的局域网广播地址(你可以使用以下方法找到它:
ifconfig
然后ping该地址以刷新系统的ARP表(所有邻居都会回答)
ping -b -c1 BROADCAST_IP_ADDRESS
arp -a
您可以使用自动化来完成此操作
arp -a | grep MAC_ADRESS | cut -f2 | tr -d '()'
我刚刚编写了一个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"
我的第一个想法是让您使用RARP协议。这似乎已经过时,并且可能未启用您的树莓派TCP/IP堆栈。稍微调整一下您的Raspi配置,看看是否可以启用它。然后,从另一个Linux框中,您可以发出命令rarp -a
这是一篇旧帖子,但最近我需要它。
我尝试对本地网络上的所有设备进行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使用 ifconfig 命令
ifconfig | grep "inet " | grep -v 127.0.0.1
ifconfig
就可以给出整个细节列表,以便过滤正确的 IP 地址。使用 grep inet 来缩小搜索范围。127.0.0.1
的行。