Android获取以太网mac、ip、网关、子网掩码
作者:互联网
在物联网开发中经常需要获取本机的网卡信息,代码如下
1.获取mac
public static String getLocalMacAddress() {
String mac = "";
try {
String path = "sys/class/net/eth0/address";
FileInputStream fis_name = new FileInputStream(path);
byte[] buffer_name = new byte[1024 * 8];
int byteCount_name = fis_name.read(buffer_name);
if (byteCount_name > 0) {
mac = new String(buffer_name, 0, byteCount_name, "utf-8");
}
if (mac.length() == 0) {
path = "sys/class/net/eth0/wlan0";
FileInputStream fis = new FileInputStream(path);
byte[] buffer = new byte[1024 * 8];
int byteCount = fis.read(buffer);
if (byteCount > 0) {
mac = new String(buffer, 0, byteCount, "utf-8");
}
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("mac=====" + mac);
return mac.trim();
}
2.获取ip
public static String getIpAddressForInterfaces() {
String interfaceName = "eth0";
try {
Enumeration<NetworkInterface> enNetworkInterface = NetworkInterface.getNetworkInterfaces(); //获取本机所有的网络接口
while (enNetworkInterface.hasMoreElements()) { //判断 Enumeration 对象中是否还有数据
NetworkInterface networkInterface = enNetworkInterface.nextElement(); //获取 Enumeration 对象中的下一个数据
if (!networkInterface.isUp()) { // 判断网口是否在使用
continue;
}
if (!interfaceName.equals(networkInterface.getDisplayName())) { // 网口名称是否和需要的相同
continue;
}
Enumeration<InetAddress> enInetAddress = networkInterface.getInetAddresses(); //getInetAddresses 方法返回绑定到该网卡的所有的 IP 地址。
while (enInetAddress.hasMoreElements()) {
InetAddress inetAddress = enInetAddress.nextElement();
if (inetAddress instanceof Inet4Address) { //判断是否未ipv4
return inetAddress.getHostAddress();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "0.0.0.0";
}
3.获取网关
public static String getGateWay() {
String[] arr;
try {
Process process = Runtime.getRuntime().exec("ip route list table 0");
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String string = in.readLine();
arr = string.split("\\s+");
return arr[2];
} catch (IOException e) {
e.printStackTrace();
}
return "0.0.0.0";
}
4.获取子网掩码
/*获取子网掩码*/
public static String getIpAddressMaskForInterfaces() {
String interfaceName = "eth0";
try {
//获取本机所有的网络接口
Enumeration<NetworkInterface> networkInterfaceEnumeration = NetworkInterface.getNetworkInterfaces();
//判断 Enumeration 对象中是否还有数据
while (networkInterfaceEnumeration.hasMoreElements()) {
//获取 Enumeration 对象中的下一个数据
NetworkInterface networkInterface = networkInterfaceEnumeration.nextElement();
if (!networkInterface.isUp() && !interfaceName.equals(networkInterface.getDisplayName())) {
//判断网口是否在使用,判断是否时我们获取的网口
continue;
}
for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) {
if (interfaceAddress.getAddress() instanceof Inet4Address) {
//仅仅处理ipv4
//获取掩码位数,通过 calcMaskByPrefixLength 转换为字符串
return calcMaskByPrefixLength(interfaceAddress.getNetworkPrefixLength());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return "0.0.0.0";
}
/*通过子网掩码的位数计算子网掩码*/
private static String calcMaskByPrefixLength(int length) {
int mask = 0xffffffff << (32 - length);
int partsNum = 4;
int bitsOfPart = 8;
int maskParts[] = new int[partsNum];
int selector = 0x000000ff;
for (int i = 0; i < maskParts.length; i++) {
int pos = maskParts.length - 1 - i;
maskParts[pos] = (mask >> (i * bitsOfPart)) & selector;
}
String result = "";
result = result + maskParts[0];
for (int i = 1; i < maskParts.length; i++) {
result = result + "." + maskParts[i];
}
return result;
}
标签:网关,return,String,ip,networkInterface,mac,new,以太网,name 来源: https://blog.csdn.net/weixin_43976036/article/details/120645878