有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这个方法在安卓中没有给我子网掩码

我有一个方法,可以使用安卓 shell命令获取子网掩码。我在adb和works上进行了测试;然而,我只是把它放在一个方法中,我可以在安卓监视器控制台上显示输出。如果有更简单的方法,请提供建议。谢谢顺便说一句,我在主活动线程中运行这个(没有异步任务)

/*
    * method to return private subnet mask
    */
    public String getPrivateSubnet() {

        String output = "";
        final String SUBNET_CMD = "/system/bin/ifconfig wlan0 | find \"Mask\"";
        try {
            Process p = Runtime.getRuntime().exec(SUBNET_CMD);
//            p.wait();
            Log.v("SUBNET OUTPUT", p.toString());
            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                Log.v("SUBNET", inputLine);
            }
            in.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        Log.v("SUBNET", output);
        return output;
    }

共 (1) 个答案

  1. # 1 楼答案

    如果要使用ifconfig,请使用:

    ifconfig wlan0 |  awk '/netmask/{print $4}'
    

    编辑:为了找到这个,我对自己做了一些非常快速的编码。是的,Java API允许您使用NetworkInterface类获取接口的ipv4子网掩码。我写了一段代码,可能对你有帮助。此代码为您提供每个接口的CIDR值(例如:24将是255.255.255.0)。更多信息请参见此处:https://en.wikipedia.org/wiki/IPv4_subnetting_reference

    import java.net.*;
    import java.util.Enumeration;
    
    public class Main {
    
            public static void main(String[] args) throws UnknownHostException, SocketException {
    
                Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
    
                while (networkInterfaces.hasMoreElements()) {
                    NetworkInterface networkInterface = networkInterfaces.nextElement();
                    try {
                        for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
                            System.out.println(address.getNetworkPrefixLength());
                        }
                    } catch (NullPointerException e) {
                        e.printStackTrace();
                    }
                }
            }
        }