android 获取以太网的动态IP地址,子网掩码,DNS地址,网关地址

局域网的配置,之前查找了很多方法都是关于EthernetManager(已隐藏,无法直接调用),试过很多种但是还是没成功调到过这个对象,然后直接利用adb 命令获取
获取以太网的连接信息
1.获取所有有效网关

/** * @return 获取所有有效的网卡 */
    public static String[] getAllNetInterface() { 
        ArrayList<String> availableInterface = new ArrayList<>();
        String[] interfaces = null;
        try { 
            //获取本地设备的所有网络接口
            Enumeration nis = NetworkInterface.getNetworkInterfaces();
            InetAddress ia = null;
            while (nis.hasMoreElements()) { 
                NetworkInterface ni = (NetworkInterface) nis.nextElement();
                Enumeration<InetAddress> ias = ni.getInetAddresses();
                while (ias.hasMoreElements()) { 
                    ia = ias.nextElement();
                    if (ia instanceof Inet6Address) { 
                        continue;// skip ipv6
                    }
                    String ip = ia.getHostAddress();
                    // 过滤掉127段的ip地址
                    if (!"127.0.0.1".equals(ip)) { 
                        if (ni.getName().substring(0, 3).equals("eth")) { //筛选出以太网
                            availableInterface.add(ni.getName());
                        }
                    }
                }
            }

        } catch (SocketException e) { 
            e.printStackTrace();
        }
        int size = availableInterface.size();
        if (size > 0) { 
            interfaces = new String[size];
            for (int i = 0; i < size; i++) { 
                interfaces[i] = availableInterface.get(i);
            }
        }
        return interfaces;
    }

2.获取指定网卡ip

/** * 获取指定网卡ip * * @param netInterface * @return * @throws SocketException */
    public static String getIpAddress(String netInterface) throws SocketException { 
        String hostIp = null;
        try { 
            Enumeration nis = NetworkInterface.getNetworkInterfaces();
            InetAddress ia = null;
            while (nis.hasMoreElements()) { 
                NetworkInterface ni = (NetworkInterface) nis.nextElement();
                if (ni.getName().equals(netInterface)) { 
                    Enumeration<InetAddress> ias = ni.getInetAddresses();
                    while (ias.hasMoreElements()) { 
                        ia = ias.nextElement();
                        if (ia instanceof Inet6Address) { 
                            continue;// skip ipv6
                        }
                        String ip = ia.getHostAddress();
                        // 过滤掉127段的ip地址
                        if (!"127.0.0.1".equals(ip)) { 
                            hostIp = ia.getHostAddress();
                            break;
                        }
                    }
                }
            }
        } catch (SocketException e) { 
            e.printStackTrace();
        }
        return hostIp;
    }

3.获取DNS地址 —-“getprop dhcp.eth0.dns1”

 /** * 根据adb shell命令获取 * DNS地址 * * @param name网卡名称 * @return */
    public static String getLocalDNS(String name) { 
        Process cmdProcess = null;
        BufferedReader reader = null;
        String dnsIP = "";
        try { 
            cmdProcess = Runtime.getRuntime().exec("getprop dhcp." + name + ".dns1");
            reader = new BufferedReader(new InputStreamReader(cmdProcess.getInputStream()));
            dnsIP = reader.readLine();
            return dnsIP;
        } catch (IOException e) { 
            return null;
        } finally { 
            try { 
                reader.close();
            } catch (IOException e) { 
            }
            cmdProcess.destroy();
        }
    }

4.获取子网掩码—-“getprop dhcp.eth0.mask”

/** * 获取掩码 * * @param name * @return */
    public static String getLocalMask(String name) { 
        Process cmdProcess = null;
        BufferedReader reader = null;
        String dnsIP = "";
        try { 
            cmdProcess = Runtime.getRuntime().exec("getprop dhcp." + name + ".mask");
            reader = new BufferedReader(new InputStreamReader(cmdProcess.getInputStream()));
            dnsIP = reader.readLine();
            return dnsIP;
        } catch (IOException e) { 
            return null;
        } finally { 
            try { 
                reader.close();
            } catch (IOException e) { 
            }
            cmdProcess.destroy();
        }
    }

5.网关地址—-“getprop dhcp.eth0.gateway”

 /** * 获取网关地址 * * @param name * @return */
    public static String getLocalGATE(String name) { 
        Process cmdProcess = null;
        BufferedReader reader = null;
        String dnsIP = "";
        try { 
            cmdProcess = Runtime.getRuntime().exec("getprop dhcp." + name + ".gateway");
            reader = new BufferedReader(new InputStreamReader(cmdProcess.getInputStream()));
            dnsIP = reader.readLine();
            return dnsIP;
        } catch (IOException e) { 
            return null;
        } finally { 
            try { 
                reader.close();
            } catch (IOException e) { 
            }
            cmdProcess.destroy();
        }
    }

https://github.com/huahua22/IPDemo

    原文作者:zero!
    原文地址: https://blog.csdn.net/sinat_38892960/article/details/86999772
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞