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

相關文章
相關標籤/搜索