android 网络地址,ip地址获取,子网掩码获取,默认网关获取
获取eth0的ip: getIpAddrForInterfaces("eth0")
private String getIpAddrForInterfaces(String interfaceName){ 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(); } // 判断未lo时 // if (inetAddress instanceof Inet4Address && !inetAddress.isLoopbackAddress()) { // return inetAddress.getHostAddress(); // } } } } catch (Exception e) { e.printStackTrace(); } return "error"; }
获取eth0的子网掩码:getIpAddrMaskForInterfaces("eth0")
private String getIpAddrMaskForInterfaces(String interfaceName) { try { Enumeration<NetworkInterface> networkInterfaceEnumeration = NetworkInterface.getNetworkInterfaces(); //获取本机所有的网络接口 while (networkInterfaceEnumeration.hasMoreElements()) { //判断 Enumeration 对象中是否还有数据 NetworkInterface networkInterface = networkInterfaceEnumeration.nextElement(); //获取 Enumeration 对象中的下一个数据 if (!networkInterface.isUp() && !interfaceName.equals(networkInterface.getDisplayName())) { //判断网口是否在使用,判断是否时我们获取的网口 continue; } for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) { // if (interfaceAddress.getAddress() instanceof Inet4Address) { //仅仅处理ipv4 return calcMaskByPrefixLength(interfaceAddress.getNetworkPrefixLength()); //获取掩码位数,通过 calcMaskByPrefixLength 转换为字符串 } } } } catch (SocketException e) { e.printStackTrace(); } return "error"; } //通过子网掩码的位数计算子网掩码 public 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; }
获取默认网关:getGateWay()
private String getGateWay() { String [] arr; try { Process process = Runtime.getRuntime().exec("ip route list table 0"); String data = null; BufferedReader ie = new BufferedReader(new InputStreamReader(process.getErrorStream())); 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 "error"; }