V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ybjaychou
V2EX  ›  Android

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

  •  
  •   ybjaychou · 2016-07-12 20:32:56 +08:00 · 26295 次点击
    这是一个创建于 3080 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    34 条回复    2018-05-20 08:48:59 +08:00
    yuedingwangji
        1
    yuedingwangji  
       2016-07-12 22:07:49 +08:00
    iptable 是应该可以做到
    acess
        2
    acess  
       2016-07-12 22:29:30 +08:00
    确定目标 IP 的话,直接改路由表应该可以。
    如果不确定目标 IP ,可以用 iptables 给某个应用的 UID 打上 MARK ,然后再指定它走哪一条路由
    ybjaychou
        3
    ybjaychou  
    OP
       2016-07-12 23:41:50 +08:00 via Android
    @acess IP camera 的 ip 是固定的 我用 ip route 看的话是有 eth0 和 wlan0 2 个
    ybjaychou
        4
    ybjaychou  
    OP
       2016-07-12 23:44:43 +08:00 via Android
    现在 Android 的情况是如果 3 个都连上的话,默认是只走以太网这个通道的,这样的话,我拿到摄像头的数据就没办法通过 WiFi 或者 4g 往外传了
    ahtsiu
        5
    ahtsiu  
       2016-07-13 00:25:49 +08:00   ❤️ 1
    android M: ConnectivityManager.bindProcessToNetwork
    android L: ConnectivityManager.setProcessDefaultNetwork
    低版本貌似就没有了。
    另外 iOS 上有类似的 API 吗?
    pagxir
        6
    pagxir  
       2016-07-13 00:34:54 +08:00 via Android
    你得改用 tethering 。因为有线优先基本比无线高。
    killeder
        7
    killeder  
       2016-07-13 08:37:54 +08:00 via Android
    可以的,以前做过,就是修改路由或者 iptables
    ybjaychou
        8
    ybjaychou  
    OP
       2016-07-13 09:47:03 +08:00
    @ahtsiu 多谢,但是我是要一个 app 访问 2 个不同的网络啊
    ybjaychou
        9
    ybjaychou  
    OP
       2016-07-13 09:54:44 +08:00
    @killeder
    现在以太网是静态 IP ,直接连接的 IP 摄像头( 192.168.2.10 ),可以访问,但是同时又需要 Wi-Fi 或者 4G 可以连接到外网把数据传出去,我要怎么修改路由或者 iptables 啊,多谢了!
    ybjaychou
        10
    ybjaychou  
    OP
       2016-07-13 09:58:58 +08:00
    @killeder 是否可以指定 192.168.2.xx 的走以太网,其他的走 Wi-Fi 或者 4G 呢?
    killeder
        11
    killeder  
       2016-07-13 11:28:54 +08:00
    @ybjaychou 我做过以太网做热点, wifi 做上行或者 3G 做上行,大概思路是一样的
    killeder
        12
    killeder  
       2016-07-13 11:40:34 +08:00
    @ybjaychou 给个联系方式,我发给你点资料
    ybjaychou
        13
    ybjaychou  
    OP
       2016-07-13 13:48:19 +08:00
    @killeder 280512307 多谢了
    ahtsiu
        14
    ahtsiu  
       2016-07-13 14:07:34 +08:00
    @ybjaychou 一个 app 可以开多个进程啊,两个进程之间 RPC
    ahtsiu
        15
    ahtsiu  
       2016-07-13 14:09:31 +08:00
    嗷你有 root ,那还是修改路由或者 iptable 来得快一点
    pangliang
        16
    pangliang  
       2016-07-13 15:07:07 +08:00
    静态路由, 改路由表; 具体知识 google 吧;
    ybjaychou
        17
    ybjaychou  
    OP
       2016-07-13 16:58:44 +08:00
    @ahtsiu @pangliang 可以帮忙弄下吗,愿意提供一定的报酬,可以的话加下 13 楼的 Q ,麻烦了。
    ahtsiu
        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 去了
    ybjaychou
        19
    ybjaychou  
    OP
       2016-07-14 12:25:40 +08:00
    @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
        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 参数表示这条静态路由永久生效,没有这个参数的话你电脑重启后将丢失这条路由策略。
    ybjaychou
        21
    ybjaychou  
    OP
       2016-07-16 11:51:49 +08:00
    @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 :浏览器插件今天上传图片上传不了。。
    uglyer
        22
    uglyer  
       2017-04-27 15:25:18 +08:00
    想问下楼主,最后是否解决了,现在我也有类似需求。^
    csrbot
        23
    csrbot  
       2017-05-27 16:38:50 +08:00
    楼主,你系统里面修改了哪些让 Android 系统能同时连接 wifi 和以太网,能提供一个方向吗?谢谢了。
    ybjaychou
        24
    ybjaychou  
    OP
       2017-05-27 17:25:46 +08:00
    主要是修改了 framework 里的 ConnectivityService,我这边是以太网优先级比 Wi-Fi 高,所以就在网络连接准备注册网络时把以太网处理下,这样的话,Wi-Fi 和以太网都有 IP 了,然后设置下路由表,指定什么网段走什么网卡就可以了
    ybjaychou
        25
    ybjaychou  
    OP
       2017-05-27 17:26:04 +08:00   ❤️ 1
    hefj
        26
    hefj  
       2017-08-07 11:41:15 +08:00
    楼主,我这边也有这样的需求,修改 connectivityservice 之后目前两个网络都能够链接,以太网优先级高,功能正常。wifi 连接后图标有一个感叹号,设备无法 ping 通 wifi 所链接的路由器的网关,但是和 wifi 同一个网段的其他设备可以 ping 通此设备,请问该如何配置路由?
    hefj
        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 进行往外发数据?
    writeapoemforyou
        28
    writeapoemforyou  
       2017-08-11 16:06:08 +08:00
    我的是参考这里的 http://blog.csdn.net/roger__wong/article/details/8603275#reply
    第一个回复就是我的, 开启了移动数据,wlan 无法 ping 通,路由配置一直不行,不知道怎么配置路由.
    writeapoemforyou
        29
    writeapoemforyou  
       2017-08-11 16:11:03 +08:00
    @hefj 和你一样的情况
    hefj
        30
    hefj  
       2017-08-14 11:10:45 +08:00
    我这边让同事写了一个 demo,通讯是没有问题的,也就是说 socket 通讯没问题,但是就是没法 ping,现在忙,我就没有去纠结这个问题了,等有时间在研究,android 网络这一块确实还是不太懂 @writeapoemforyou
    ChanghuiN
        31
    ChanghuiN  
       2017-08-31 15:27:07 +08:00
    @ybjaychou 楼主您好,我这边也有实现同时使用 4g、wifi 的需求,我在开发者着模式中选择了始终开启移动数据,可以获取两个 ip,不过我用 4g ip 的时候,手机为什么会走 wifi 的通道啊
    hicai
        32
    hicai  
       2017-12-02 22:28:13 +08:00
    @killeder 你好具体是怎么做的呢?能不能请教下。。。
    hicai
        33
    hicai  
       2017-12-02 22:33:55 +08:00
    @killeder 因为最近也有这方面的需求.
    jyb
        34
    jyb  
       2018-05-20 08:48:59 +08:00
    @killeder @ChanghuiN @hicai 我的需求也是一样,网上相关资料很少啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3408 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:55 · PVG 18:55 · LAX 02:55 · JFK 05:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.