关于 android 设备同时使用以太网和 Wi-Fi 或者以太网和 4G 的问题

2016 年 7 月 12 日
 ybjaychou

这几天遇到这么个问题:客户的需求是以太网连接 IPCamera ,然后通过 Wi-Fi 或者 4G 把 camera 的数据传出去,但是 android 上貌似只能一个通道来传输数据,目前我在系统上的修改是可以让 3 个网卡同时获取的到 IP ,但是走数据的话只能有一个,不知道能否通过修改路由表什么的来解决这个问题,网络这块的东西不是很熟悉,希望有解决办法的人帮帮忙 (客户天天呆在我们公司,说没弄好就不走了。。。)

30906 次点击
所在节点    Android
34 条回复
yuedingwangji
2016 年 7 月 12 日
iptable 是应该可以做到
acess
2016 年 7 月 12 日
确定目标 IP 的话,直接改路由表应该可以。
如果不确定目标 IP ,可以用 iptables 给某个应用的 UID 打上 MARK ,然后再指定它走哪一条路由
ybjaychou
2016 年 7 月 12 日
@acess IP camera 的 ip 是固定的 我用 ip route 看的话是有 eth0 和 wlan0 2 个
ybjaychou
2016 年 7 月 12 日
现在 Android 的情况是如果 3 个都连上的话,默认是只走以太网这个通道的,这样的话,我拿到摄像头的数据就没办法通过 WiFi 或者 4g 往外传了
ahtsiu
2016 年 7 月 13 日
android M: ConnectivityManager.bindProcessToNetwork
android L: ConnectivityManager.setProcessDefaultNetwork
低版本貌似就没有了。
另外 iOS 上有类似的 API 吗?
pagxir
2016 年 7 月 13 日
你得改用 tethering 。因为有线优先基本比无线高。
killeder
2016 年 7 月 13 日
可以的,以前做过,就是修改路由或者 iptables
ybjaychou
2016 年 7 月 13 日
@ahtsiu 多谢,但是我是要一个 app 访问 2 个不同的网络啊
ybjaychou
2016 年 7 月 13 日
@killeder
现在以太网是静态 IP ,直接连接的 IP 摄像头( 192.168.2.10 ),可以访问,但是同时又需要 Wi-Fi 或者 4G 可以连接到外网把数据传出去,我要怎么修改路由或者 iptables 啊,多谢了!
ybjaychou
2016 年 7 月 13 日
@killeder 是否可以指定 192.168.2.xx 的走以太网,其他的走 Wi-Fi 或者 4G 呢?
killeder
2016 年 7 月 13 日
@ybjaychou 我做过以太网做热点, wifi 做上行或者 3G 做上行,大概思路是一样的
killeder
2016 年 7 月 13 日
@ybjaychou 给个联系方式,我发给你点资料
ybjaychou
2016 年 7 月 13 日
@killeder 280512307 多谢了
ahtsiu
2016 年 7 月 13 日
@ybjaychou 一个 app 可以开多个进程啊,两个进程之间 RPC
ahtsiu
2016 年 7 月 13 日
嗷你有 root ,那还是修改路由或者 iptable 来得快一点
pangliang
2016 年 7 月 13 日
静态路由, 改路由表; 具体知识 google 吧;
ybjaychou
2016 年 7 月 13 日
@ahtsiu @pangliang 可以帮忙弄下吗,愿意提供一定的报酬,可以的话加下 13 楼的 Q ,麻烦了。
ahtsiu
2016 年 7 月 14 日
假设你 ip cam ( 192.168.2.123 )上取数据的端口是 80 , tcp 协议,则:
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.167 --dport 80 -j DNAT --to-destination 192.168.2.123
然后你向 192.168.1.167:80 请求的数据就被路由到 192.168.2.123:80 去了
ybjaychou
2016 年 7 月 14 日
@ahtsiu 试了下,还是不行。我现在把系统改成了默认不走以太网了,走 wifi ( IP 是 192.168.1.xx )或者 4G ,以太网的 IP 是 192.168.2.123 , IP 摄像头直接接再以太网口( ip 是 192.168.2.10 ),现在只要让 192.168.2.xx 的请求走以太网就行了。还有,我用上面的命令设置了之后怎么查看有没有设置成功呢, iptables -L -n 看不到有设下去啊
pangliang
2016 年 7 月 15 日
route add 192.168.1.0 mask 255.255.255.0 192.168.0.2 -p
解释一下, 192.168.1.0 ,指定我需要访问的网段, mask 后面的是子网掩码。最后 192.168.0.2 表示通过哪个地址访问。结尾-P 参数表示这条静态路由永久生效,没有这个参数的话你电脑重启后将丢失这条路由策略。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/292053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX