我是靠谱客的博主 感性棒球,这篇文章主要介绍wlan mac地址 network interface IPv6 IPv4,现在分享给大家,希望可以做个参考。

网络接口获取:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while(interfaces.hasMoreElements()){ String name = interfaces.nextElement().getName(); NetworkInterface inter = null; StringBuffer buffer = new StringBuffer(); if (name != null) { Log.e(TAG, "interface: " + name); inter = NetworkInterface.getByName(name); } if(inter != null){ byte[] addr = inter.getHardwareAddress(); if(addr != null){ for (byte b : addr) { buffer.append(String.format("%02X:", b)); } if (buffer.length() > 0) { buffer.deleteCharAt(buffer.length() - 1); } Log.e(TAG, name + ": " +buffer.toString()); } } }

可能会打出如下log:

复制代码
1
2
3
4
5
6
interface: eth0 eth0: 2E:54:E7:A7:D5:83 interface: sit0 interface: lo interface: wlan0 wlan0: B0:F1:EC:0B:85:26

就是有名字为eth0,sit0,lo,wlan0四个接口。其中只有两个接口有mac地址。

getHardwareAddress():

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/** * Returns the hardware address of the interface, if it has one, or null otherwise. * * @throws SocketException if an I/O error occurs. * @since 1.6 */ public byte[] getHardwareAddress() throws SocketException { try { // Parse colon-separated bytes with a trailing newline: "aa:bb:cc:dd:ee:ffn". String s = IoUtils.readFileAsString("/sys/class/net/" + name + "/address"); byte[] result = new byte[s.length()/3]; for (int i = 0; i < result.length; ++i) { result[i] = (byte) Integer.parseInt(s.substring(3*i, 3*i + 2), 16); } // We only want to return non-zero hardware addresses. for (int i = 0; i < result.length; ++i) { if (result[i] != 0) { return result; } } return null; } catch (Exception ex) { throw rethrowAsSocketException(ex); } }

看代码是读取"/sys/class/net/" + name + "/address"

网络接口(NetworkInterface)除了mac地址外,还有一个重要属性,就是IP,这个要联网了才有的。使用如下方法读取IPv6

复制代码
1
2
3
4
5
6
7
private static String[] readIfInet6Lines() throws SocketException { try { return IoUtils.readFileAsString("/proc/net/if_inet6").split("n"); } catch (IOException ioe) { throw rethrowAsSocketException(ioe); } }

就是去"/proc/net/if_inet6"读取,内容如下:

00000000000000000000000000000001 01 80 10 80       lo

fe80000000000000020822fffe6ce3fb 07 40 20 80    wlan0

 

而读取IPv4时使用NetworkInterface#collectIpv4Address()

读取IPv6石使用NetworkInterface#collectIpv6Addresses(),该方法调用了NetworkInterface#readIfInet6Lines()

使用工具写Mac地址和写wlan 地址(或者说wifi 地址)是不是一样,工具写Mac地址指的是写以太网接口的地址,而不是无线局域网接口的mac地址。一般名字以eth开头的就是以太网接口(Ethernet),无线局域网接口名称一般使用wlan开头。

接口名称可以使用以下属性定义:

wifi.interface=wlan0

 

写完wifi 地址后,一般需要重启或者恢复出厂设置才可以生效,就是说并不是一开始就写到"/sys/class/net/" + name + "/address"中,而是在开机或者在recovery模式启动时才由某个位置复制到"/sys/class/net/" + name + "/address"。有些时候工具写完后,能读出来,但是使用代码读取不了,是因为"/sys/class/net/" + name + "/address"根本没有,就是说在开机启动时复制到"/sys/class/net/" + name + "/address的过程中出错了。

 

因为移动设备有各种id,比较容易混,下面再说一下SN号和IMEI号:

SN码是Serial Number的缩写,有时也叫SerialNo,也就是产品序列号,产品序列是为了验证“产品的合法身份”而引入的一个概念,它是用来保障用户的正版权益,享受合法服务的;一套正版的产品只对应一组产品序列号。

IMEI为TAC + FAC + SNR + SP。IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录

 

最后

以上就是感性棒球最近收集整理的关于wlan mac地址 network interface IPv6 IPv4的全部内容,更多相关wlan内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(120)

评论列表共有 0 条评论

立即
投稿
返回
顶部