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

本文详细介绍了如何通过Java代码获取局域网内的网络配置信息,包括获取所有有效网关、指定网卡IP、DNS地址、子网掩码及网关地址的方法。通过解析网络接口和使用adb命令,实现了对局域网配置的有效读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

局域网的配置,之前查找了很多方法都是关于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

### 在 Linux 系统中配置以太网IP 地址子网掩码网关 #### 1. **临时配置(无需重启即可生效)** 使用 `ifconfig` 或者较新的 `ip` 命令可以实现对网络接口的动态配置。这些更改仅在当前会话有效,系统重启后会被重置。 - **使用 `ifconfig` 命令** ```bash sudo ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up ``` 这里将名为 `eth0` 的网络接口分配了一个 IP 地址 `192.168.0.1` 和子网掩码 `255.255.255.0` 并启动该接口[^1]。 - **使用 `ip` 命令** ```bash sudo ip addr add 192.168.0.1/24 dev eth0 sudo ip link set eth0 up ``` 此处同样设置了相同的 IP 地址子网掩码(通过 `/24` 表示),并启用了 `eth0` 接口[^2]。 #### 2. **永久配置(持久化设置)** 若要使配置在网络服务重启或系统重启之后仍然保留下来,则需要编辑相应的网络配置文件。 - **对于基于 Debian 的发行版(如 Ubuntu)** 编辑 `/etc/network/interfaces` 文件: ```plaintext auto eth0 iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254 ``` 修改完成后保存退出,并应用新配置: ```bash sudo systemctl restart networking.service ``` - **对于基于 Red Hat 的发行版(如 CentOS, Fedora)** 找到对应的网络脚本文件,通常位于 `/etc/sysconfig/network-scripts/ifcfg-eth0` 中: ```plaintext DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.0.1 NETMASK=255.255.255.0 GATEWAY=192.168.0.254 DNS1=8.8.8.8 ``` 应用改动: ```bash sudo systemctl restart network.service ``` #### 3. **配置默认网关** 默认网关用于指定当目标地址不属于本地局域网时的数据转发路径。可以通过以下命令添加默认路由: ```bash sudo route add default gw 192.168.0.254 eth0 ``` 或者使用 `ip` 命令替代: ```bash sudo ip route add default via 192.168.0.254 dev eth0 ``` 要让这个设置成为永久性的,可以在上面提到的配置文件中的适当位置加入相应条目[^2]。 #### 4. **验证配置是否成功** 可以通过多种方式检验刚刚完成的网络参数设定效果如何。 - 检查 IP 地址及其关联信息: ```bash ip addr show eth0 ``` - 测试连通性至特定节点: ```bash ping 192.168.0.254 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值