Android 以太网转 WiFi 热点 (并在同一网段 192.168.0.xx)
命令如下:
首先打开盒子的 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)相关推荐
- Android 11 固定wifi热点名和密码
Android 11 固定wifi热点名和密码的路径和早期版本也有不同,Android 11 固定wifi热点名和密码的路径方法如下: 1.固定wifi热点名 a.去掉热点明后的SSID --- a/ ...
- Android以太网和WIFI完美共存
Android以太网和WIFI完美共存 目前安卓设备主要为移动设备,安卓系统相应针对移动设备特性做了一些优化.考虑移动设备尽量降低功耗的需求,所以在网络部分设计了评分机制,(数据连接50,WIFI60 ...
- 192.168.0.1手机登录wifi设置改密码
产品型号:华为mate 30 系统版本:EMUI 10.1 192.168.0.1手机登陆wifi设置改密码总共分为4步,具体的操作步骤如下: 1.首先连接需要改密码的WiFi,打开浏览器,在搜索栏中 ...
- 计算机修改wif教程,192.168.0.1修改wifi密码的方法(适合新手)
摘 要 用电脑登录到192.168.0.1修改wifi密码时,建议按照下面的步骤操作. 用电脑登录到192.168.0.1修改wifi密码时,建议按照下面的步骤操作. 检查电脑ip地址设置 重要提示: ...
- 192.168.0.1手机登陆wifi设置怎么做
192.168.0.1手机登陆wifi设置怎么做,192.168.1.1手机登录入口 要使用手机登陆192.168.1.1页面,设置无线路由器上网,一共需要3个步骤: 1.路由器连接 2.手机搜索连接 ...
- 电脑或手机上访问192.168.0.1无线路由器WiFi密码怎么找回?
无线路由器WiFi密码怎么找回? 1.电脑或手机已连接当前网站,在电脑或手机上打开浏览器,输入IP地址:192.168.0.1 (部分型号路由器IP地址不同,请参考路由器底部的标签): 2.输入后访问 ...
- android去掉便携式wifi热点,Android 获取便携式wifi热点开关状态、热点开启与关闭...
最近做了这两个功能: 1.获取便携式wifi热点开关状态: 2.热点的开启与关闭. 第二个功能就不用说了,百度一搜一大把:第一个功能,在百度基本找不到,最后我是在google找到的,getWifiAp ...
- android 11 固定WIFI热点路由器IP
android11和安卓低版本一样固定WIFI热点路由器IP 的路径不同 这个是在 android11上的修改: --- a/frameworks/base/packages/Tethering/sr ...
- Android中扫描wifi热点
1.首先新建了布局模板XML文件vifi.xml,代码很简单,如下: <?xml version="1.0" encoding="utf-8"?> ...
最新文章
- bzoj2059[Usaco2010 Nov]Buying Feed 购买饲料*
- 高性能HTTP加速器varnish实践
- Android数据适配器Adapter简介
- 第二阶段冲刺 第六天
- 食饵捕食者模matlab,几类食饵-捕食者模型的定性分析和数值模拟
- Android Studio支持Java1.8的解决方案
- cb rm –rf_php执行rmrf命令
- 看《Java就业培训教程》--孙孝祥著有读书笔记
- 利用ESP8266与米思齐从零制作模拟温室大棚--硬件篇
- 3D优化之ShadowGun系列二:浓烟,使用面片模拟粒子效果
- 台式计算机调亮度快捷键,台式电脑怎么调节屏幕亮度
- 软件生命周期是什么?
- python 椭圆曲线加法_椭圆曲线上点的运算
- 被割裂的数据思维(古代战争中的应用)
- html li点隐藏,js控制li的隐藏和显示实例代码
- 一起学Python吧~re正则+MySQL
- 科软分数线狂降53分!凡是隔壁却。。。
- HTML中spry菜单栏,DreamweaverCS3中用“spry菜单栏”制作纵向导航菜单.docx
- [网络工程师]-路由协议-OSPF协议
- 图像控制点 形变_Sentinel-1 TOPS影像干涉处理与形变监测
热门文章
- CIO,马上就没有线下灾备了,不要做最后一个
- 倒计时 5 天!年度开发者盛会 Unite Shanghai 2019 全日程揭晓(附表)
- 程序员找工作黑名单:除了 996.ICU,程序员还将如何自救?
- Python 为何能成最强编程语言?!
- 无法拯救的 Wear OS!
- 小米要用 AI + IoT 做年轻人的第一套智能家居
- Google 要放弃 Android 了?
- linux下mysql的用户名,linux下设置mysql用户名及密码
- 哈工大女孩学计算机毕业转行,2020考生切记,上985读这些专业,据说都是“坑”!...
- linux ati显卡驱动下载,LINUX 下ati最新显卡驱动下载