Android在以太网下获取默认网关

网上搜索到的大部分结果都是:html

 

EthernetManager mEthManager =context.getSystemService("ethernet");linux

EthernetDevInfo mEthInfo =mEthManager.getSavedEthConfig();android

Log.i(TAG, "mEthInfo == null :  " + (mEthInfo == null));shell

if (mEthInfo != null) {网络

String ipAddress = mEthInfo.getIpAddress();.net

String netMask = mEthInfo.getNetMask();code

String dns = mEthInfo.getDnsAddr();htm

String gateWay = mEthInfo.getRouteAddr();blog

 

可是EthernetManager和EthernetDevInfo都是android隐藏的API,我曾尝试过经过反射去获取EthernetManager实例,可是也拿不到“getSavedEthConfig“这个方法,多是我确实没移植代码进去,暂时放弃了这种办法(找不到源码。。。)dns

 

仍是从adb shell命令入手,而后我找到了这个指令:

getprop | grep eth0

 

 

可是getprop是从各类配置文件中读取信息,并不适合于全部机顶盒,此路不通。。。

 

最后我找到了ip rout 命令,直接从路由表中获取信息,这应该适用于全部设备了吧。

 

直接执行ip rout 命令,无线网络状态下,能获取到默认网关,这个平常操做没问题,当链接到无线网络时就尴尬了,返回:

192.168.2.0/24 dev eth0  proto kernel scope link  src 192.168.2.248

阉割掉了默认网关等重要信息。。。

纠结了好久。。。

 

而后去看路由表的知识吧,路由表的知识借鉴(感谢这篇文章做者):

http://www.mamicode.com/info-detail-1412618.html

 

 

linux 系统中,能够自定义从 1-252个路由表,其中,linux系统维护了4个路由表:

·      0#表:系统保留表

·      253#表: defulte table 没特别指定的默认路由都放在改表

·      254#表: main table 没指明路由表的全部路由放在该表

·      255#表: locale table 保存本地接口地址,广播地址、NAT地址由系统维护,用户不得更改

(直接copy)

总而言之:我直接从系统保留表中获取到了我想要的信息,有线下的默认网关,具体大家须要DNS啊什么的或者须要去修改信息的本身去的找吧,总能找到的哈哈。

 

附上查看系统保留表的命令和效果截图:ip route list table 0
 

 

从返回里截取一下就好了。

至于怎么执行adb shell之类的基础操做就不放上来了,须要的底下再私聊我吧。

 

打完手工!

———————————————— 版权声明:本文为CSDN博主「EnvyChen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接及本声明。 原文连接:https://blog.csdn.net/EnvyChen/article/details/79425409

相关文章
相关标签/搜索