获取局域网内新加设备的IP地址

背景

新入一个设备,只能通过IP地址访问之。先将自己的主机用网线直接连接该设备,并将主机IP地址设为静态,且与该设备的默认IP处于同一网段下,可以通过该设备的默认IP访问之。现将该设备接入局域网,局域网内采用DHCP动态分配IP,该设备IP不再是默认IP,需要想办法确定其IP地址。

失败的尝试

已知该设备的MAC地址,尝试网上介绍的各种根据MAC查IP的工具,基本上都无法下载或使用。也没有路由器的权限,看不了DHCP分配表。

成功的方法

理论知识

新设备接入时IP地址的获取,离不开DHCP(Dynamic Host Configuration)。想起大三学的《计算机网络》有相关内容,遂查阅该教材。在该教材中提到:


对于一台新到达的主机而言,DHCP协议是一个4个步骤的过程:

  1. DHCP服务器发现
    新到主机需要发现与其交互的DHCP服务器:新到主机使用DHCP发现报文(DHCP discover message),使用广播目的地址255.255.255.255和源地址0.0.0.0向子网内广播。(不知道DHCP服务器在哪,所以需要广播)传输协议为UDP,目的端口为67。
  2. DHCP服务器提供
    DHCP服务器收到DHCP发现报文时,使用一个DHCP提供报文(DHCP offer message),并且仍然使用广播地址255.255.255.255向子网内广播。(新到主机还未有自己的IP地址,因此DHCP服务器只能广播找到它)该子网可能有几个DHCP服务器。每台服务器提供的报文包含有收到的发现报文的事物ID、向客户推荐的IP地址(这就是我们想要的)、网络掩码以及IP地址租用期。
  3. DHCP请求
    新到达的客户从一个或多个服务器提供中选择一个,并向其用一个DHCP请求报文(DHCP request message)进行响应,回显配置参数。
  4. DHCP ACK
    服务器用DHCP ACK报文(FHCP ACK message)对DHCP请求报文进行响应,证实所要求的参数。

理论分析

在上述过程中,第二步非常重要。因为DHCP服务器会将带有新接设备IP地址的报文广播到子网中,那么同处于子网中的我的主机也能收到该报文,从而知道服务器给新接设备分配的IP地址。由于步骤三和步骤四中,新接设备已经获取IP地址,因此此时客户端和服务器端所发报文不再以广播的形式,我的主机也就收不到这些报文。换言之,当子网中有多个DHCP服务器时,新接设备选择哪个服务器提供的IP地址是无从知晓的。只能希望DHCP服务器只有一个。但即使有多个,也能在多个DHCP提供报文中的IP地址上一个个试出来。

实际操作

有了这些理论知识后,马上下载Wireshark软件开始抓包。

  1. 先尝试抓取DHCP发现报文:对抓取的包筛选,源IP地址为0.0.0.0,目的IP地址为255.255.255.255,源MAC地址为xxx(已知源MAC地址,这里不公布),目的端口为67。果然筛选出一个包:
    获取局域网内新加设备的IP地址
    可以看到Info一栏里面显示DHCP Discover。后面的Transaction ID就是事物ID,每一个新接设备执行DHCP过程都有一个事物ID,以互相区分。
  2. 再筛选出DHCP提供报文。目的IP地址为255.255.255.255,然而并没有找到提供报文。
  3. 在步骤一时,发现了DHCP请求报文:
    获取局域网内新加设备的IP地址
    可以看到事物ID和发现报文中的一样。在DHCP请求报文中,找到了书上所说的回显配置参数
    获取局域网内新加设备的IP地址
    从最后一个划线处可以看到,新接设备请求将10.112.232.137作为自己的IP地址。这一地址最后得到验证,就是新接设备的IP地址。

结果分析

成果

能够通过抓包软件在新设备接入局域网时抓取DHCP包,并通过包的内容获取新接设备被DHCP服务器分配的IP地址。

问题

在实际操作中,步骤二三的结果和前面的理论分析有点不太一样。

  1. 根据理论知识,DHCP发现报文是以广播形式发送出来的,但是抓包软件并没有抓取到该包。
  2. 从上图中回显参数中可以发现,Client IP address仍然为0.0.0.0。这说明,新接设备在发送DHCP请求报文时,虽然自己之前已经收到了DHCP提供报文,但自己的IP地址并没有得到确认(DHCP ACK),还不能将提供报文中提供的IP地址正式作为自己的IP地址。因此新接设备在发送DHCP请求报文时,源IP地址仍然为0.0.0.0。但目的IP仍然为255.255.255.255,而不是具体的DHCP服务器,这也不符合理论分析。

额外收获

在抓包分析中,还发现了有关新接设备的另外两个包:
获取局域网内新加设备的IP地址
获取局域网内新加设备的IP地址
获取局域网内新加设备的IP地址
获取局域网内新加设备的IP地址
其中前两张图是第一个包,后两张图是第二个包。这两个包出现在DHCP四步骤完成后。

  1. 在第一个包中,192.168.0.120是该设备的默认IP地址,10.112.232.137是该设备被DHCP服务器分配的IP地址。可以看出,该包是一个广播包,新接设备通过该包查询所在局域网中IP地址同为10.112.232.137的设备,以免冲突。
  2. 在第二个包中,Gratuitous ARP是免费ARP,它用来向局域网中的设备告知MAC地址为xxx的设备,IP地址为10.112.232.137。同时,它还可以检测当前局域网中是否有IP地址冲突。若当前局域网存在一个IP地址一样的设备,则新接设备会受到来自该设备的包。因此,正常情况下,这种数据包是不希望有回应的。