IP探测实现 ARP与设备发现

        前几天遇到个需求,要探测局域网内 PC机的 IP,有可能跨网段,但是在同一个交换机;于是果断从网上下载了一个DEMO,可以填写探测的IP地址范围,扫描出范围内的主机IP; 抓包看了下,发现一堆icmp包,看来是通过枚举ping实现的;

        准备交差的时候被告知 负责探测的主机并不知道其他主机的IP,也不知道IP子网掩码和网关什么的,这样的话没法填写IP段,下载的这个DEMO就没什么用了......然后找了下设备同事,得知可以通过ARP广播实现;但是我印象中广播是不能跨网段的,只能在本子网中进行广播,但是同事又说是可以的,所以只能百度了,度娘解释如下:

    1)受限广播

      它不被路由发送,但会被送到相同物理网络段上的所有主机;

        IP地址的网络字段和主机字全为1就是地址255.255.255.255

    2)直接广播

         网络广播会被路由,并会发送到专门网络上的每台主机;

       IP地址的网络字段定义这个网络,主机字通常全为1,如 192.168.10.255;

         按度娘这个解释,arp广播因为发送帧地址是全FF,算是受限广播,也就是二层广播;而直接广播就是三层广播;二层广播不经过路由器,所以可以在相同物理网络段上进行广播;相同物理网络段,可以理解为 通过链路层 就可以到达的主机 就算是相同物理网络段; 所以使用arp进行二层广播应该是可行的;

       其实还有一个额外需求,就是探测同一交换机下各主机的子网掩码和网关;仔细思考了一下,感觉按照现有的协议是无法实现的,因为网络中各主机的通信都只需要IP地址即可,加传输层的话也就多个端口,并没有用到网关和子网掩码;(当然如果有童鞋发现有现在的协议可以实现,可以指点一下);

       既然无法直接用现成的协议,那么设备查找功能是如何实现的呢?看arp报文协议格式:

     IP探测实现 ARP与设备发现_第1张图片

          ARP数据帧长28字节,以太网帧头14字节,由于 以太网 最小长度要求是60字节,所以还要填充 18字节,这里的18字节就相当于平时函数里的保留字段了,可以自己随便填写(还没试过超过18字节的情况,理论上来说超过18字节应该也是可以的),比如说这里可以填写 网关,子网掩码,通信命令种类等等;自定义一下发送与接收消息的通信协议就可以了;

         好了,上面是arp方式,其实还发现有另外一个协议------mDNS

       mDNS即组播DNS(multicast DNS)。使用5353端口,在内网没有DNS服务器时,就会出现此组播信息。在一个没有常规DNS服务器的小型网络内,可以使用mDNS来实现类似DNS的编程接口、包格式和操作语义。

        ........

        mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信;

        苹果的Bonjour就是一个基于mDNS的产品。

        里解释很清楚:mDNS即组播DNS(multicast DNS), mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信;

       也就是mDNS协议可以在一个局域网里实现主机的互相发现,至于协议中没有附带子网掩码和网关,由于没有找到mDNS报文格式,也不清楚;不过有一点是很清楚的,就是该协议使用了组播来实现,并且需要主机上开启mDNS服务;那么也就是说,如果可以在主机上跑服务,我们自己也可以使用组播来实现局域网主机的通信;

    

        PS:后来wireshark抓包发现有一些ssdp和llmnr包,百度后发现都能 实现设备发现的功能,并且有一个共同点,都是组播实现的;

        PS2:今天测试发现使用多播的协议没办法穿越路由,估计是路由屏蔽了子网外的多播包,还是用arp自定义协议实现比较靠谱,这个不过路由,同一链路下应该是OK的,不过还没有测试。

        PS3:arp广播包不能穿越三层交换机的vlan

 

   参考文献:

    http://baike.baidu.com/link?url=-1Vu-KNkS6JJ-QWHuq2K7tV87w-IFydbjbzM-0SEPxA2TdbggFzTBC6MEeJvxsosgZzXWESmbwlbD4YqXmiKDq

    http://baike.baidu.com/link?url=DPFwOXcMarTi_X7MXVXU_0KGA-ZHaj2HdhCxVevckUKco_R6j2yKmY7AbSX8eUGWaeLXYq_dg1I03xxof5m3pa

你可能感兴趣的:(网络,IP探测,ARP,设备发现)