V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rrfeng
V2EX  ›  问与答

APP 开发中实时透明的抓包并展示的正确姿势

  •  
  •   rrfeng · 2016-08-31 12:22:20 +08:00 · 5105 次点击
    这是一个创建于 3008 天前的主题,其中的信息可能已经有所发展或是发生改变。
    开发 APP 的过程中肯定有很多抓包需求,相信大家目前用的不外乎 Fiddler/Charles/AnyProxy 等等,土豪用 Surge ?

    除了 Surge ,都是代理模型,首先开启一个代理服务(即抓包软件本体),然后在设备上设置代理。最后开启 APP ,访问网站,到电脑上查看请求和回应。


    为什么没有一个更优雅的方式呢?
    1. 在 router/switch 上抓包( tcpdump ),或者做端口镜像然后在某个 server 上抓包。
    2. 实时解析抓到的流量,然后在一个 web 上展示。可以根据简单的条件过滤。

    主要问题:
    1. 实时 decoding 需要其他工具支持(例如 packetbeat 可以完成 http 的抓取和存储,展示再想办法)
    2. SSL 的问题(我们自己的服务器,当然有 private key ,理论上是可以解密的)

    目前现有的工具来说, wireshark 是唯一比较完美的解决方案:可以实时抓包,实时显示,实时过滤,并且实时解密 ssl (只要你有 server private key )。但是如何将 wireshark web 化?

    看了一下 wireshark 的 command line 版也支持很丰富的功能。但是尚未找到正确姿势。

    大家有什么想法?(不局限于 wireshark ,其实 packetbeat 就是很好的工具,但是不支持 https ……)
    第 1 条附言  ·  2016-08-31 14:19:25 +08:00
    可能是我描述的有些问题。

    我的目的是:
    1. 客户端完全无感知。
    2. 方便查看,过滤,分享。

    其中 1 是很容易实现的,特别是有网关的控制权限情况下(或者通过特定的热点,也不是不行)。 2 目前没有发现相关的工具,举 wireshark 的例子是为了说明它的实时解码以及 https(ssl) decrypt 能力很难自己实现。

    如果用过 AnyProxy 的话,其实 AnyProxy 的 Web Console 已经基本符合需求了。但是还是需要客户端设置代理来抓包。

    也就是说,想要 tcpdump + anyproxy webconsole 的组合体。

    其实这里面有一个非常难的点,就是 https …… 如果一是 DHE 等算法交换的动态密钥即使是有 server privite key 也没有办法解密……
    13 条回复    2016-08-31 22:32:48 +08:00
    icebergSnow
        1
    icebergSnow  
       2016-08-31 12:34:24 +08:00
    wireshark + tcpdump 不好用???
    ssh root@HOST tcpdump -U -s0 -w - 'not port 22' | wireshark -k -i -

    Fiddler/Burp 也不麻烦吧??哪里不优雅了,对于 web 抓包然后展示来说。还能修改数据包呢。


    web 抓包然后展示来说这种肯定麻烦多了
    icebergSnow
        2
    icebergSnow  
       2016-08-31 12:38:46 +08:00
    给你一个更好的方案,开个热点,然后用 wireshark 。
    我真不信有比这个优雅的
    kevinroot
        3
    kevinroot  
       2016-08-31 12:40:13 +08:00
    zeo0811
        4
    zeo0811  
       2016-08-31 12:56:15 +08:00
    手机上有一款抓包的 APP,叫 replica
    sunhr
        5
    sunhr  
       2016-08-31 13:12:55 +08:00   ❤️ 1
    iOS 设备连接 Mac ,开 rvi ,然后 Wireshark 抓包
    qnnnnez
        6
    qnnnnez  
       2016-08-31 13:26:23 +08:00 via Android
    arpspoof+wireshark
    rrfeng
        7
    rrfeng  
    OP
       2016-08-31 14:08:20 +08:00
    @icebergSnow
    不优雅的原因说了,需要开启代理,配置代理,而且不能共享。比如测试发现一个接口有问题,要么截图给后端 /客户端看,要么开发再自己抓一遍(或者 curl/postman )。

    而且我的重点不是怎么抓包,这个很容易。重点是如何方便的查看,过滤,分享,并且对用户(测试 /运营)透明。
    所以我说 packetbeat 是一个很好的工具。

    @kevinroot
    这个需要在某个地方集成它的 client ,没法对用户透明。

    @zeo0811
    一切需要修改手机的,其实都不如直接用 Fiddler 之流。

    @sunhr
    Android 怎么办?

    @qnnnnez
    arpspoof 不如 mirror port
    also24
        8
    also24  
       2016-08-31 14:25:02 +08:00
    楼主的需求,让我想起了这个:
    http://rehorn.github.io/livepool/

    不过好久没更新过了的样子
    rrfeng
        9
    rrfeng  
    OP
       2016-08-31 14:28:42 +08:00
    @also24
    这个和 AnyProxy 很像的。所以也是同样的问题:需要在移动设备上设置代理服务器。
    hffaxy
        10
    hffaxy  
       2016-08-31 16:52:50 +08:00
    Surge 本质上也算是代理吧,官方说仍然是 TUN/TAP 的虚拟网卡做中转
    同理的是 Android 上的 VPNService ,差不多一个道理,也是基于 TUN/TAP 的封装。
    目前刚好我在做这个东西,讨论一些我的看法:
    这里只谈流量获取,不涉及流量分析
    APP 流量获取:
    1.终端本身
    实现方法: TUN/TAP 虚拟网卡中转, IOS 的 Surge , Android 的 VPNService
    缺陷:屏幕太小,在这上面分析数据包数据太低效率且无通用协议解码应用,且只能拿到第二层以上的数据
    优点的话,就是流量干净,不容易掺杂其他流量
    2.路由
    实现方法: AP , Route 的镜像流量口,或者一堆能够镜像流量导出的协议获得流量,甚至直接连接电脑 tcpdump
    缺陷:需要物理部署,相对麻烦,通常存在非目标 APP 产生的流量,需要筛选
    优点:电脑有 wireshark 一步到位,拿到流量即可可解码分析
    hffaxy
        11
    hffaxy  
       2016-08-31 17:00:25 +08:00
    wireshark web 化这个怎么说呢?我司的某个产品就是这个,据我所知市面上基本能够提供大流量分析服务的公司都有这个,要么是利用 wireshark (毕竟开源)依葫芦画瓢做一个,要么是自己实现流量协议的识别和解码。
    只要识别解码库做好, web 都是去调用,不麻烦的,主要是识别解码库,需要 up 自己想办法啦
    工作量嘛~见仁见智咯
    ysdj
        12
    ysdj  
       2016-08-31 17:12:45 +08:00 via Android
    httpwatch 不就是通过网卡截 http 包的么
    mingyun
        13
    mingyun  
       2016-08-31 22:32:48 +08:00
    @also24 居然腾讯出的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3181 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 13:38 · PVG 21:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.