参考1:https://blog.youkuaiyun.com/kangear/article/details/80547073
参考2: https://blog.youkuaiyun.com/lqxandroid2012/article/details/79071027
shell脚本下载链接: https://download.youkuaiyun.com/download/Seeker_ZeroOne/12091703
- 原理:
IP网络数据是通过路由表进行路由的,从IP协议层来看,socket 应用程序发送IP网络数据的时候,会主动填写目标IP, route根据目标IP和路由规则判断该IP数据的出口,同时填上源IP地址,再把网络数据包通过相应的网口发送出去。而android采用的是优先级路由策略,正常情况下,不仅在开启WIFI的时候framework会踢掉mobile,而且还会默认路由。
所以需要解决的问题是:
1.绕过framework层
2.采用多级路由[多张路由表策略]
- 工具:
wireless tools https://download.youkuaiyun.com/download/zygcs2/9519148
busybox http://www.busybox.net/downloads/binaries
- 具体操作:
- 一,绕过framework,开启双网卡
- 加载wlan0 驱动: insmod /system/lib/modules/wlan.ko
- 启动wlan0 网卡: netcfg wlan0 up
- 链接wifi热点: wpa_supplicant -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf -B
- 分配IP地址: netcfg wlan0 dhcp
此时,不指定interface,ping 192.168.137.1是ping不通的。
- 二,添加二级路由
ip route add 192.168.137.0/24 dev wlan0 proto static scope link table rmnet0,此时不指定interface可以ping通了。