这几天遇到这么个问题:客户的需求是以太网连接 IPCamera ,然后通过 Wi-Fi 或者 4G 把 camera 的数据传出去,但是 android 上貌似只能一个通道来传输数据,目前我在系统上的修改是可以让 3 个网卡同时获取的到 IP ,但是走数据的话只能有一个,不知道能否通过修改路由表什么的来解决这个问题,网络这块的东西不是很熟悉,希望有解决办法的人帮帮忙 (客户天天呆在我们公司,说没弄好就不走了。。。)
1
yuedingwangji 2016-07-12 22:07:49 +08:00
iptable 是应该可以做到
|
2
acess 2016-07-12 22:29:30 +08:00
确定目标 IP 的话,直接改路由表应该可以。
如果不确定目标 IP ,可以用 iptables 给某个应用的 UID 打上 MARK ,然后再指定它走哪一条路由 |
3
ybjaychou OP @acess IP camera 的 ip 是固定的 我用 ip route 看的话是有 eth0 和 wlan0 2 个
|
4
ybjaychou OP 现在 Android 的情况是如果 3 个都连上的话,默认是只走以太网这个通道的,这样的话,我拿到摄像头的数据就没办法通过 WiFi 或者 4g 往外传了
|
5
ahtsiu 2016-07-13 00:25:49 +08:00 1
android M: ConnectivityManager.bindProcessToNetwork
android L: ConnectivityManager.setProcessDefaultNetwork 低版本貌似就没有了。 另外 iOS 上有类似的 API 吗? |
6
pagxir 2016-07-13 00:34:54 +08:00 via Android
你得改用 tethering 。因为有线优先基本比无线高。
|
7
killeder 2016-07-13 08:37:54 +08:00 via Android
可以的,以前做过,就是修改路由或者 iptables
|
9
ybjaychou OP @killeder
现在以太网是静态 IP ,直接连接的 IP 摄像头( 192.168.2.10 ),可以访问,但是同时又需要 Wi-Fi 或者 4G 可以连接到外网把数据传出去,我要怎么修改路由或者 iptables 啊,多谢了! |
15
ahtsiu 2016-07-13 14:09:31 +08:00
嗷你有 root ,那还是修改路由或者 iptable 来得快一点
|
16
pangliang 2016-07-13 15:07:07 +08:00
静态路由, 改路由表; 具体知识 google 吧;
|
17
ybjaychou OP |
18
ahtsiu 2016-07-14 01:02:39 +08:00
假设你 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 去了 |
19
ybjaychou OP @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 看不到有设下去啊
|
20
pangliang 2016-07-15 17:44:55 +08:00
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 参数表示这条静态路由永久生效,没有这个参数的话你电脑重启后将丢失这条路由策略。 |
21
ybjaychou OP @pangliang 可能 android 上的 route 命令跟 Linux 上的有点不一样,执行你这命令执行不了,
===================================== root@rk3288:/ # ip route add 192.168.2.0 mask 255.255.255.0 192.168.2.123 Error: either "to" is duplicate, or "mask" is a garbage. 255|root@rk3288:/ # 255|root@rk3288:/ # ip route 192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.123 root@rk3288:/ # oute add 192.168.2.0 mask 255.255.255.0 192.168.2.123 < 1|root@rk3288:/ # 1|root@rk3288:/ # 1|root@rk3288:/ # 1|root@rk3288:/ # ip route 192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.123 root@rk3288:/ # root@rk3288:/ # busybox route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.2.0 * 255.255.255.0 U 0 0 0 eth0 root@rk3288:/ # youngdeMacBook-Pro:~ a_Bin$ ===================================== ps :浏览器插件今天上传图片上传不了。。 |
22
uglyer 2017-04-27 15:25:18 +08:00
想问下楼主,最后是否解决了,现在我也有类似需求。^
|
23
csrbot 2017-05-27 16:38:50 +08:00
楼主,你系统里面修改了哪些让 Android 系统能同时连接 wifi 和以太网,能提供一个方向吗?谢谢了。
|
24
ybjaychou OP 主要是修改了 framework 里的 ConnectivityService,我这边是以太网优先级比 Wi-Fi 高,所以就在网络连接准备注册网络时把以太网处理下,这样的话,Wi-Fi 和以太网都有 IP 了,然后设置下路由表,指定什么网段走什么网卡就可以了
|
26
hefj 2017-08-07 11:41:15 +08:00
楼主,我这边也有这样的需求,修改 connectivityservice 之后目前两个网络都能够链接,以太网优先级高,功能正常。wifi 连接后图标有一个感叹号,设备无法 ping 通 wifi 所链接的路由器的网关,但是和 wifi 同一个网段的其他设备可以 ping 通此设备,请问该如何配置路由?
|
27
hefj 2017-08-07 11:54:18 +08:00
@ybjaychou
具体情况是这样, 我的机器以太网 IP: 192.168.1.100, WIFI IP 192.168.56.102 我的电脑 IP 192.168.1.106 ,我的手机 IP 192.168.56.107 用 adb 进入机器 shell 环境,ping 192.168.1.106 可以通,ping IP 192.168.56.107 不通 用电脑 ping 192.168.1.100 可以通 用手机 ping 192.168.56.102 可以通 也就是说目前机器无法通过 wifi 向外发数据 如何修改理由或者源码来让 wifi 也能够往外发数据,或者指定 ip 通过 wifi 进行往外发数据? |
28
writeapoemforyou 2017-08-11 16:06:08 +08:00
我的是参考这里的 http://blog.csdn.net/roger__wong/article/details/8603275#reply
第一个回复就是我的, 开启了移动数据,wlan 无法 ping 通,路由配置一直不行,不知道怎么配置路由. |
29
writeapoemforyou 2017-08-11 16:11:03 +08:00
@hefj 和你一样的情况
|
30
hefj 2017-08-14 11:10:45 +08:00
我这边让同事写了一个 demo,通讯是没有问题的,也就是说 socket 通讯没问题,但是就是没法 ping,现在忙,我就没有去纠结这个问题了,等有时间在研究,android 网络这一块确实还是不太懂 @writeapoemforyou
|