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

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

如果不想了解,请直接伸手 : 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地址 的对应关系

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

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

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

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

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

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

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

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

但是,目前android不支持IPV6的协议,不过据说内核C库上是支持。。网络是推荐使用GogoDroid客户端来获取IPV6地址;经尝试,是可以获取地址,但是总不能要求需要使用的客户端都安装这个软件吧。不太现实。现状:现在,服务器部署在IPV6网络环境,提供支持IPV6的路由器;问题,开发的客户端(不包括GogoDroid)需要用IPV6协议的网络访问服务器接口,但是手机并不能获取到IPV6地址。思路:1、客户端自行, 模拟GogoDroid的方式,来获取一个网络地址。比较可行,毕竟是开源的项目。。2、通过NDK来调用C库,完成获取IPV6地址的 *** 作。。第一种方式的可行性比较高。。大家有更好的方式或者是已经现成的解决方案,希望能帮忙提供信息资料,不胜感激。!

android手机获取自带存储路径和sd卡存储路径的方式是:

调用EnvironmentgetExternalStorageDirectory,返回的存储目录并不是系统内置的SD卡目录。

1、手机将eMC存储挂载到/mnt/external_sd、/mnt/sdcard2等节点,而将外置的SD卡挂载到EnvironmentgetExternalStorgeDirectory这个结点。

2、而另一部分手机直接将eMMC存储挂载在EnvironmentgetExternalStorageDirectory这个节点,而将真正的外置SD卡挂载到/mnt/external_sd、/mnt/sdcard2等节点。调用EnvironmentgetExternalStorgeDirectory,则返回内置的SD的路径。

扩展资料:

Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android10)。后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。

Android的系统架构和其 *** 作系统一样,采用了分层的架构。从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

参考资料:

百度百科-android

android 是Linux内核,linux中mac地址是保存在/etc/initd/networ 文件中的,mac地址可以用:连接,也可以用-连接。但是在android中mac地址是直接写在硬件中的,需要通过API 才能获取1、Android 获取本机Mac 地址方法:需要在AndroidManifestxml文件中添加权限:  public String getLocalMacAddress() { WifiManager wifi = (WifiManager) getSystemService(ContextWIFI_SERVICE); WifiInfo info = wifigetConnectionInfo(); return infogetMacAddress(); } 2、Android 获取本机IP地址方法:public String getLocalIpAddress() {try {for (Enumeration en = NetworkInterfacegetNetworkInterfaces(); enhasMoreElements();) {NetworkInterface intf = ennextElement();for (Enumeration enumIpAddr = intfgetInetAddresses(); enumIpAddrhasMoreElements();) {InetAddress inetAddress = enumIpAddrnextElement();if (!inetAddressisLoopbackAddress()) {return inetAddressgetHostAddress()toString();}}}} catch (SocketException ex) {Loge("WifiPreference IpAddress", extoString());}return null;}

以上就是关于android 获取局域网IP与MAC 地址 毫秒级(详解)全部的内容,包括:android 获取局域网IP与MAC 地址 毫秒级(详解)、android 如何获取IPV6的地址、获取android手机的自带存储路径和sdcard存储路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9706435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存