Android在以太网下获取默认网关
网上搜索到的大部分结果都是:
EthernetManager mEthManager =context.getSystemService("ethernet");
EthernetDevInfo mEthInfo =mEthManager.getSavedEthConfig();
Log.i(TAG, "mEthInfo == null : " + (mEthInfo == null));
if (mEthInfo != null) {
String ipAddress = mEthInfo.getIpAddress();
String netMask = mEthInfo.getNetMask();
String dns = mEthInfo.getDnsAddr();
String gateWay = mEthInfo.getRouteAddr();
但是EthernetManager和EthernetDevInfo都是android隐藏的API,我曾尝试过通过反射去获取EthernetManager实例,但是也拿不到“getSavedEthConfig“这个方法,可能是我确实没移植代码进去,暂时放弃了这种办法(找不到源码。。。)
还是从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之类的基础操作就不放上来了,需要的底下再私聊我吧。
打完手工!