• Android App用MulticastSocket监听组播,为什么连接到不同路由、在不同手机上跑,有的能收到有的收不到


    ---------------------------!! 转载请注明出处 !!-----------------------
     

    一个项目,利用wifi组播在局域网内发现设备。却发现在有的路由器上能正常工作,有的路由器上完全监听不到组播消息。检查路由配置没有任何问题。

    组播实现很简单:拿住WifiLock,拿住MulticastLock,创建MulticastSocket端口1900,ttl设为3或者5,然后joinGroup加入239.255.255.250组,然后设置socket的timeout,调用receive开始监听。还要记得manifest中加上几个相关的permission。

    网上可以搜到很多示例,基本都是这样的处理流程,没什么复杂的。

    一开始测试时工作正常,由于用的是UPnP通用的组播ip (239.255.255.250:1900),所以可以收到局域网里很多组播消息,包括MediaRenderer,InternetGateway等等,我们只要从中筛出自己的消息就行了。

    但小批量投放后,发现了问题。我们的产品在某些路由器上无法监听到组播消息。监听端口上一片静默,不仅我们自己的消息收不到,网络中其他设备发的组播消息也收不到。

    带回3台有问题的路由,分别是 1) linksys,2) 华为,3) ARRIS

    而国内的三台路由上工作却是正常的,这三台分别是  4)小米,5) 华硕, 6)Cisco

    找了另外三台android手机安装同一个app做测试,三台手机:htc (android4.4.2),Sony (andorid4.1.2),华为(android5.0.2)

    问题来了,htc和sony在6台路由上均能监听到组播,华为荣耀7跟我们的设备一样,完全监听不到。

    *以上路由和手机就不标具体型号了^_^

    ----------------------------------------------------问题描述完毕,开始解决------------------------------------

    WinPCap工具抓包发现,

    两台测试机htc和sony,在加入组播组(joinGroup)时,会发送
    IGMP V2 Membership Report / Join group 239.255.255.250
    离开组播组(leaveGroup)
    IGMP V2 Leave Group 239.255.255.250
     
    有些支持IGMP V3的路由上抓包如下:
    IGMP V3 Membership Report / Join group 239.255.255.250 for any sources
    IGMP V3 Membership Report / Leave group 239.255.255.250

    而出问题的手机(华为手机和我们自己的设备),根本没发IGMP包。

    也就是表示,它们在加入组播组时,尽管在app总调用joinGroup成功,但实际上并未向路由器发出IGMP请求,即根本没加入组播组,自然就监听不到消息。

    那么为什么这两台机器在小米,华硕,cisco路由上能正常监听呢? 猜测这三台路由恐怕并没有严格按照的UPnP协议来实现,猜测它可能给连在路由上的任何设备发送组播(类似广播一样处理),设备收到组播后,根据本地的配置情况决定是否发给app。由于没有路由器实现的代码,只是根据现象猜测。

    至此,我们要解决的问题就是 让它们发出IGMP包。

    对华为手机,没办法了,不是我做的。。。

    我们自己的设备是有全部源码的,调查发现linux kernel的config中 CONFIG_IP_MULTICAST 这项没定义。

    添加CONFIG_IP_MULTICAST=y, 重编kernel img后,再次抓包能抓到设备发出的IGMP包了,实测问题解决。
     
    这个问题调查过程中 发现在国内的站点上很少能搜到真正有帮助的信息,所以发这个帖子,也许你的问题与我不一样,但至少提供一个思路吧。
     
    ---------------------------转载请注明出处-----------------------
     
  • 相关阅读:
    云主机上搭建squid3代理服务器
    常见问题集锦
    [DFNews] Guidance推出EnCase v7.06以及EnCase Imager 7.06
    [计算机取证] JumpLists file names and AppID calculator
    [eDiscovery] The Longterm Preservation of Digital Evidence
    [DFNews] GSI发布EnCase v7.07
    [DFNews] eDEC发布“狼蛛”2.0手机取证系统
    [手机取证] CelleBrite Android Lock Bypass
    [DFNews] CelleBrite发布可视化关联分析软件Link Analysis 1.7
    [DFNews] EnCE认证变化,v6认证及相关课程即将取消
  • 原文地址:https://www.cnblogs.com/inkheart0124/p/5508420.html
Copyright © 2020-2023  润新知