美文网首页
android 获取局域网IP与MAC 地址 毫秒级(详解)

android 获取局域网IP与MAC 地址 毫秒级(详解)

作者: kalshen | 来源:发表于2017-07-16 14:43 被阅读1401次
    两个 linux命令

    如果不想了解,请直接伸手android 获取局域网IP与MAC 地址(精简)

    开始理清思路:主要使用 linux 两个命令(2017-07-21 fix:这个思路不好,后面使用udp取代【毫秒级】)

    【ping】: 查询某个ip是否被设备占用

    【cat】  :文本输出命令(其实可以使用 【arp】,但手机需要root权限)

    【ping】:这个我就不说了,实在不知道的,这次度娘不会骗你的。主要讲讲 【arp】:这里只简单的介绍,推荐一篇博文:Android 平台上的 ARP 和 ARP欺骗 。我们的【cat】命令主要为了输出手机本地ARP缓存表,ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系

    我们可以打开cmd 执行: arp -a

    可以看到我们电脑中缓存的 ip地址与对应的mac地址,但我们手机上又要怎么获得呢?

    第一: 我们要循环执行ping命令,使得手机中的APR缓存表能缓存局域网中的存在的ip与mac。

    循环执行ping,有些方法不贴出来了,有项目地址,可以去看源码 真正的ping执行方法

    第二: 我们要循环执行cat命令,拿到手机arp缓存表,读取缓存表中的mac地址,将对应的ip与mac存入集合

    手机arp缓存表中的数据 主要获取ip对应mac的方法

    哈哈其实到这里基本就结束了,也不算什么详解,目前这个方法还有个缺陷就是,耗时比较长,我计算了一下大概得花10秒才能得到局域网内的所有存在的ip与对应的mac。

    还有待改善,其实想先取arp缓存,然后把arp中没有的ip地址通过ping测试,然后再取arp缓存,这样可以减少一部分的ping测试线程,但为了保证arp中ip对应的mac永远是新的,只能每次都循环ping测试所有网段内的ip。如果有更好的想法,希望来怼我。

    (2017-07-21)找到了解决时间上的问题,由原先的十秒缩减到毫秒级(实测不到一秒)

    改变思路:使用udp来替代原先多线程ping

    具体怎么玩我就不写了,他人的思路,抄袭过来,有损我英俊的形象,写的还是比较好的。

    Android 单线程也能极速刷新并获取局域网设备(IP+MAC)信息, 从4分30S 优化到 0.150S 不是梦

    如果觉得他的用起来麻烦,我的IpScanner类也更新了,可以直接copy使用,还是简单的。 

    奉上项目地址:IpSanner(一个类一个回调就搞定了,简单的)

    相关文章

      网友评论

          本文标题:android 获取局域网IP与MAC 地址 毫秒级(详解)

          本文链接:https://www.haomeiwen.com/subject/vlvtkxtx.html