【问题标题】:Ifconfig and route command on AndroidAndroid 上的 ifconfig 和 route 命令
【发布时间】:2016-10-17 16:20:42
【问题描述】:

我想知道是否存在以编程方式在 Android 设备中获取 ifconfigroute 命令结果的方法?我可以在非 root 设备中执行此操作吗?

【问题讨论】:

    标签: android linux shell ifconfig


    【解决方案1】:

    在您的 AndroidManifest.xml 文件中

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

    您的代码:

        ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Service.CONNECTIVITY_SERVICE);
    
                    /* you can print your active network via using below */
                    Log.i("myNetworkType: ", connectivityManager.getActiveNetworkInfo().getTypeName());
                    WifiManager wifiManager= (WifiManager) getApplicationContext().getSystemService(getApplicationContext().WIFI_SERVICE);
    
    
                    Log.i("routes ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getRoutes().toString());
                    Log.i("domains ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDomains().toString());
                    Log.i("ip address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses().toString());
                    Log.i("dns address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDnsServers().toString());
    
    
    
                    if(connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI) {
                        Log.i("myType ", "wifi");
                        DhcpInfo d =wifiManager.getDhcpInfo();
                        Log.i("info", d.toString()+"");
                    }
                    else if(connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_ETHERNET) {
    /* there is no EthernetManager class, there is only WifiManager. so, I used this below trick to get my IP range, dns, gateway address etc */
    
                        Log.i("myType ", "Ethernet");
                        Log.i("routes ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getRoutes().toString());
                        Log.i("domains ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDomains().toString());
                        Log.i("ip address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getLinkAddresses().toString());
                        Log.i("dns address ", connectivityManager.getLinkProperties(connectivityManager.getActiveNetwork()).getDnsServers().toString());
    
                    }
                    else {
    
                    }
    

    输出

    您无法知道您是通过 wifi 连接还是使用 WifiManager 的网络连接,因为 WifiManager 仅处理 wifi。你必须使用ConnectivityManager。我再次更新了代码,合并WifiManagerConnectivityManager 以产生您想要的结果。

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多