Android WiFi 以太网同时上内外网

其实标题也可以叫「Android 双网卡同时上内外网」,都是一样的原理。现在更多的双网卡是WiFi + 以太网,这里就以这个为标题了。都知道Android底层就是Linux,网络访问和Ubuntu没有什么大的区别。比如Ubuntu 16.04,同时连接以太网和WiFi时,两个网段就可以同时访问。这里有记录Ubuntu 16.04 双网卡 同时上内外网。但是Android需要双网卡同时访问内外网时,会有一些问题。ROM里如果默认了以太网优先级高得话,那么就没有办法走WiFi的网段;反之亦然。一共有两个问题需要改,一是在以太网和WiFi同时工作时,改Android系统源码使得优先级低的网卡也不至于被ifconfig down了;另外一个是两个网卡都是up的时候,内外网段能够同时访问;

修改网络优先级代码,保证双网卡同时up状态

不同的Android版本改动方式有所不同,我这里记录关相关的内容Android中设置Ethernet为默认网络类型。也可以参考留言对高版本的Android源码修改;
这里我就不修改,以手动方式up被系统down了的网卡;

修改路由表和策略使得双网卡同时上网

Ubuntu 16.04之所以能双网卡同时工作,在于双网卡同时连网时,系统会自动配置路由表,使用route命令能查看。其实Android上也能自动配置,使用busybox route查看到的和Ubuntu 16.04查看到的,并没有太大我差别,但是就是ping不通。这里有和我遇到同一个问题的同志Wifi + Ethernet workable at the same time on Android。ping时指定网卡也能ping通。

ping -I eth0 192.168.1.103

但是,这样就会麻烦一些,上层应用APP就得单独使用JNI调用到底层创建绑定eth0的方式来访问。这是什么原因导致了Android和Ubuntu 16.04的不同呢?路由表看似一样,其实Android中用了多张路由表,使用busybox route查看到的路由表,并没有被Android优先使用,所以会导致奇怪的现象。当然还有一个策略,路由表+策略才是Android中的网络红绿灯。这个文章有详细的介绍Android策略路由。

我用的是NanoPC-T2这个板子,默认WiFi优先级高于以太网,两个网都连接上之后,使用busybox ifconfig查看的是如下景象:(假定:wlan0网段:192.168.43.xxxeth0网段:192.168.1.xxx)

由于我没有改ROM代码,所以这里要手动up起来eth0,如下命令:

busybox ifconfig eth0 192.168.1.110 up  

这样就启动了以太网。接下来就ping一下试试:

接下来就是重头戏了,之前一直没有接触过的,多张路由表以及策略。运行这个命令,可以添加到路由表中了:

ip route add 192.168.1.0/24 dev eth0 proto static scope link table wlan0

这样就可以ping通了,不需要加-I指定网卡了。

白名单

假定:wlan0网段:192.168.43.xxxeth0网段:192.168.1.xxx,所有其他ip均走wlan0,但是其中一个ip(比如:128.32.22.0)走eth0。那么就需要用到白名单,需要再添加一个:
待续

更多相关文章

  1. Android中设置Ethernet为默认网络类型
  2. android logcat用法小结
  3. Android引导程序开发要点
  4. android logcat用法总结
  5. Android(安卓)-- 怎么发出和接收广播, Broadcast, 电话拨号拦截,短
  6. 我对Android(安卓)Activity的生命周期是这样理解的
  7. Android中SoundPool放声音
  8. Android的BroadcastReceiver简介
  9. Android(安卓)App卡顿慢优化之多线程优化

随机推荐

  1. Android(安卓)M 新的运行时权限开发者需
  2. android 中处理崩溃异常并重启程序
  3. 获取Android设备硬件信息
  4. Android(安卓)JNI 技术简介
  5. 移动应用界面设计的尺寸设置及规范
  6. android框架
  7. android使用注解替代枚举
  8. android基本理解
  9. 新手学习linux需了解的内容
  10. Android进程管理机制及优化(HTC&其它可参