命令如下:

首先打开盒子的 wifi 热点功能,再用以下命令
ip link set eth0 up;
ip link add eth1 type bridge ; ip link set eth0 master eth1;
busybox ifconfig eth0 0.0.0.0
ip link set wlan0 master eth1
busybox ifconfig wlan0 0.0.0.0
ip link set eth1 down;ip link set eth1 up;
/system/bin/iptables -F
/system/bin/iptables -X
/system/bin/iptables -t nat -F

同时,系统层要改两个地方

1 frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java

// If we don't already have an interface, and if this interface matches
         // our regex, start tracking it.
-        if (!iface.matches(mIfaceMatch) || isTrackingInterface())
+        Log.d(TAG, "edit by Wade Started tracking interface " + iface + " " + isTrackingInterface());
+        if (!iface.matches("eth1") || isTrackingInterface())

2 device/rockchip/common/init.rockchip.rc
加一个 service
 service dhcpcd_eth1 /system/bin/dhcpcd -aABDKL
    class late_start
    disabled
    oneshot
    
    
分析和说明。
1.命令分析:
 发现路由不对( ping -I eth1 网关 okay, ping 网关 no okay),就加了一条,busybox route add default  gw 192.168.0.1 dev eth1 ,路由对了。可以ping 通
 路由对了,ping 171.90.249.254 ( ping IP 可以,但是域名不行)。网上找资料用android 的  ndc resolver setnetdns ppp0  8.8.8.8 8.8.4.4 解决问题。
 自此,盒子 ping 外网可以了。
 
 ping 没有问题,但是在 机子上用浏览器却上不了网,
 
 随便找了一个 app ,加了一个测试代码来测试是否有 dns 或者 interface:
 
             public void onClick(View v) {
                System.out.println("test by Wade get dns test !");
                ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                for(Network network :connectivityManager.getAllNetworks())
                {
                    NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);
                    if (networkInfo.isConnected()) {
                        LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
                        linkProperties.getDnsServers().toString();
                        System.out.println("test by Wade get dns test !" + linkProperties.getDnsServers().toString());
                        System.out.println("test by Wade get interface test !" + linkProperties.getInterfaceName().toString());

System.out.println("test by Wade get interface test !" + linkProperties.getAllInterfaceNames().toString());

}
                }

}
 
 发现在 eth1 (网桥,我把 br0 改成了 eth1)的时候.. interface 为空,也就是 android 认为没有联网。
 
 改为 eth1 的原因是猜测 android 会根据命令来处理网络连接。
 
 后在网上偶然看到 ./frameworks/base/core/res/res/values/config.xml 里的 config_ethernet_iface_regex 是以太网的匹配,于是往下查
 
 在 frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java 里 mIfaceMatch 的 matches,导致只能增加 eth0 这个接口,随做
 了相应的改动。
 
 在修改后发现
 
 01-01 12:02:34.701 462-1996/system_process D/NetUtils: dhcp_do_request failed : eth1 (new)
 01-01 12:02:34.701 462-1996/system_process E/EthernetNetworkFactory: DHCP request error:Timed out waiting for dhcpcd to start

跟代码发现 dhcpcd_eth1 这个服务没有,在 init.rc 里加上后就可以了。
 
 到这个时候,浏览器可以上网了,但是上网的网卡是我们虚拟出来的网桥eth1, linkProperties.getInterfaceName().toString()) 也可以看到 eth1 了。
 
 
  
 
 2 确认了一些东西
 
 比如 ifconfig 等命令的实际是改了内核的一些状态,内核再通过 kobject_event 的方式传给上层, 网络层用 netlink 等实现对内核 event 的接收,进而知道其状态
 
 再比如 android 系统对网络ethernet 的处理,不是按命令来的,有他自己的一套:比如检测到了有新的网卡后,他自己会实现 dhcpcd , dns 等网络信息的获取。如果屏蔽了  EthernetNetworkFactory.java 的一些东西。用命令配置 eth0 到能 Ping  能 wget ,在浏览器中还是不能上网
 
 
 3:产品化
 
   我只是把功能实现,如果要做成产品,还有一些路要走:
   1 没做热点之前,如何保证 eth0 正常功能。
   2 如 eth0 ,eth1 重写一个 类似 EthernetNetworkFactory.java 的class 来处理,比如 ppp0 这样的接口
   3 在实现功能后,我再手动开关 wlan0 ,会一直报错,怎么解决。
   4 此功能的 命令 如何嵌入到系统以及撤销这个功能怎么做。

Android 以太网转 WiFi 热点 (并在同一网段 192.168.0.xx)相关推荐

  1. Android 11 固定wifi热点名和密码

    Android 11 固定wifi热点名和密码的路径和早期版本也有不同,Android 11 固定wifi热点名和密码的路径方法如下: 1.固定wifi热点名 a.去掉热点明后的SSID --- a/ ...

  2. Android以太网和WIFI完美共存

    Android以太网和WIFI完美共存 目前安卓设备主要为移动设备,安卓系统相应针对移动设备特性做了一些优化.考虑移动设备尽量降低功耗的需求,所以在网络部分设计了评分机制,(数据连接50,WIFI60 ...

  3. 192.168.0.1手机登录wifi设置改密码

    产品型号:华为mate 30 系统版本:EMUI 10.1 192.168.0.1手机登陆wifi设置改密码总共分为4步,具体的操作步骤如下: 1.首先连接需要改密码的WiFi,打开浏览器,在搜索栏中 ...

  4. 计算机修改wif教程,192.168.0.1修改wifi密码的方法(适合新手)

    摘 要 用电脑登录到192.168.0.1修改wifi密码时,建议按照下面的步骤操作. 用电脑登录到192.168.0.1修改wifi密码时,建议按照下面的步骤操作. 检查电脑ip地址设置 重要提示: ...

  5. 192.168.0.1手机登陆wifi设置怎么做

    192.168.0.1手机登陆wifi设置怎么做,192.168.1.1手机登录入口 要使用手机登陆192.168.1.1页面,设置无线路由器上网,一共需要3个步骤: 1.路由器连接 2.手机搜索连接 ...

  6. 电脑或手机上访问192.168.0.1无线路由器WiFi密码怎么找回?

    无线路由器WiFi密码怎么找回? 1.电脑或手机已连接当前网站,在电脑或手机上打开浏览器,输入IP地址:192.168.0.1 (部分型号路由器IP地址不同,请参考路由器底部的标签): 2.输入后访问 ...

  7. android去掉便携式wifi热点,Android 获取便携式wifi热点开关状态、热点开启与关闭...

    最近做了这两个功能: 1.获取便携式wifi热点开关状态: 2.热点的开启与关闭. 第二个功能就不用说了,百度一搜一大把:第一个功能,在百度基本找不到,最后我是在google找到的,getWifiAp ...

  8. android 11 固定WIFI热点路由器IP

    android11和安卓低版本一样固定WIFI热点路由器IP 的路径不同 这个是在 android11上的修改: --- a/frameworks/base/packages/Tethering/sr ...

  9. Android中扫描wifi热点

    1.首先新建了布局模板XML文件vifi.xml,代码很简单,如下: <?xml version="1.0" encoding="utf-8"?> ...

最新文章

  1. bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料*
  2. 高性能HTTP加速器varnish实践
  3. Android数据适配器Adapter简介
  4. 第二阶段冲刺 第六天
  5. 食饵捕食者模matlab,几类食饵-捕食者模型的定性分析和数值模拟
  6. Android Studio支持Java1.8的解决方案
  7. cb rm –rf_php执行rmrf命令
  8. 看《Java就业培训教程》--孙孝祥著有读书笔记
  9. 利用ESP8266与米思齐从零制作模拟温室大棚--硬件篇
  10. 3D优化之ShadowGun系列二:浓烟,使用面片模拟粒子效果
  11. 台式计算机调亮度快捷键,台式电脑怎么调节屏幕亮度
  12. 软件生命周期是什么?
  13. python 椭圆曲线加法_椭圆曲线上点的运算
  14. 被割裂的数据思维(古代战争中的应用)
  15. html li点隐藏,js控制li的隐藏和显示实例代码
  16. 一起学Python吧~re正则+MySQL
  17. 科软分数线狂降53分!凡是隔壁却。。。
  18. HTML中spry菜单栏,DreamweaverCS3中用“spry菜单栏”制作纵向导航菜单.docx
  19. [网络工程师]-路由协议-OSPF协议
  20. 图像控制点 形变_Sentinel-1 TOPS影像干涉处理与形变监测

热门文章

  1. CIO,马上就没有线下灾备了,不要做最后一个
  2. 倒计时 5 天!年度开发者盛会 Unite Shanghai 2019 全日程揭晓(附表)
  3. 程序员找工作黑名单:除了 996.ICU,程序员还将如何自救?
  4. Python 为何能成最强编程语言?!
  5. 无法拯救的 Wear OS!
  6. 小米要用 AI + IoT 做年轻人的第一套智能家居
  7. Google 要放弃 Android 了?
  8. linux下mysql的用户名,linux下设置mysql用户名及密码
  9. 哈工大女孩学计算机毕业转行,2020考生切记,上985读这些专业,据说都是“坑”!...
  10. linux ati显卡驱动下载,LINUX 下ati最新显卡驱动下载