android - Android 上的 ifconfig 和 route 命令

标签 android linux shell ifconfig

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

最佳答案

在你的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 {

                }

输出 enter image description here

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

关于android - Android 上的 ifconfig 和 route 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40091226/

相关文章:

android - 1280 x 800 平板电脑尺寸 - 是 tvdpi 还是 xhdpi?或 mdpi 大小?

Android Studio - 按钮打开新 Activity

linux - SSH 使用 Perl 脚本在远程站点创建目录

python - 在 Linux 上用 python 进行高频循环的最佳方法?

shell - 如何输入带有空格的路径?

shell - 将非常大的目录拆分为 Unix 上的较小目录的单行

android - 初始化 Imageview 的 LayoutParams 为空

android - AChartEnging XYMultipleSeriesRenderer y 标签填充

c - 如何从 PCM 获取缓冲区?

python - 在python程序中获取类似git的选项完成