通过mac地址找设备的IP地址

通过mac地址找设备的IP地址

linux系统中工作,经常需要远程登陆到远端设备进行一些配置等操作。在局域网中,如果连接着多个设备,通常情况下这些设备都是使用DHCP获得IP地址实现联网的。如果要远程登陆这些设备需要先知道他们的IP地址。如何在不接触这些设备的情况下,找到他们的IP地址呢?

今天学到一种使用arp,通过MAC地址找这些设备的方法。任何一个网络设备,它的IP不是固定的,但是它的MAC地址一定时永远不变的(不考虑MAC欺骗的情况)。在局域网中,如果两个网络设备相互通信成功过一次,就会在各自的arp表中记录到对方的IP地址和mac地址。这样,我们只要先和局域网内所有网络设备通信一次,再查询本机的arp表即可得到局域网内所有设备的IP和MAC信息。如果我们事先知道要找的设备的MAC地址,我们就能对应得到其IP。即便不知道MAC地址也没关系,小的局域网一般只有几个到几十个设备,这种方法也可以让搜索空间从256降到几十,然后再一个一个试也能提高不少效率。

如果网络中设备超过10个,手动不现实,自然想到用脚本自动处理。
代码如下:
IPsearch.sh

#!/bin/bash
IPdomain=${1%.*}
searchstart=${1##*.}
searchend=$2

for addr in $(seq $searchstart $searchend)
do
	ping -c 1 -i 0.2 -W3 $IPdomain.$addr
done
arp -n |grep -v 'incomplete'

打开命令终端:
输入

source IPsearch.sh 192.168.1.100 150

意思是从192.168.1.100开始到192.168.1.150,逐个IP去ping一下,ping通了,就完成了一次通信,arp表就会刷新. 最后通过arp -n命令获取本地arp表,通过grep筛选一下,把无效的行去掉,只留下有IP和MAC地址的行,打印在屏幕上。

Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.31.1             ether   00:50:56:c0:00:08   C                     ens33
192.168.31.254           ether   00:50:56:e6:e7:69   C                     ens33
192.168.31.2             ether   00:50:56:e9:bf:f5   C                     ens33

使用arp -a 或者arp -n之前先ping一下,这样保证ARP表得到更新,不然得到的ARP表是自然生成的,可能不全,也可能不是最新的。

你可能感兴趣的:(linux,嵌入式开发,linux)