• 朝阳消防联合快递行业开展消防安全宣传培训系列活动 2019-04-05
  • 期待已久的桃花运 竟然可以穿出来?! ——凤凰网房产广州 2019-04-05
  • 中关村雍和航星科技园,北京中关村雍和航星科技园 2019-03-22
  • 潇湘玉竹版主辛苦了! 2019-02-13
  • 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-02-13
  • 工信部:鼓励婴幼儿配方乳企质量安全追溯体系建设 2018-12-30
  • "BND2 简介 BND2 是一款图形界面的百度不限速下载器,支持 64 位 Windows 和 Mac,仅提供给黑客派会员使用,下载地址:https://share.weiyun.com/5Z32JP8 高速下载原理 通过 PCS API 获得文件、下载链接 通过 Aria2 实现高速下载 和百度网盘下载相关的内容我们 .."

    百度不限速下载器 BND2 技术架构简介

    本贴最后更新于 232 天前,其中的信息可能已经事过景迁

    BND2 简介

    BND2 是一款图形界面的百度不限速下载器,支持 64 位 Windows 和 Mac,仅提供给天中图库好运财新福会员使用,下载地址:https://share.weiyun.com/5Z32JP8

    高速下载原理

    和百度网盘下载相关的内容我们就介绍到这里。下面我们主要介绍框架和实现相关的东西,如果你刚好想做一个桌面软件,可以参考借鉴一下。

    技术架构

    BND2 基于 Electron、React、golang 实现,通过主框架 - UI - 内核的分离实现 UI 以及内核的自动更新。

    bnd2-arch

    为什么选 Electron、React 和 golang

    在选择 Electron 之前,我们大致看了下 NW.js 和 CEF,他们肯定都可以实现我们想要的,仅从文档和社区上看,Electron 比较和胃口 ??

    React 和 golang 的选择是因为我们开发团队对这两个技术比较熟悉,特别在工期紧任务重的情况下,选撸起来快的准没错。

    自检更新

    主框架启动时会从远程更新服务器上获取版本,主要包括两个版本信息:

    Electron 内建有热更新机制,但不支持 Linux(虽然目前 BND2 也没支持 Linux,但未来会考虑支持),并且我们有自己的产品版本管理机制,所以就没有考虑使用 Electron 内建的热更新了。

    另外,无论给 Windows 还是 Mac 的升级包都是使用 zip 包,主要是为了统一。但 zip 包不会保留可执行权限,Linux/Mac 解压后需要再给二进制赋一下可执行权限。

    账号登录

    为了“复用”登录,我们是通过 webview 直接引的待登录站点的 web 登录界面。没有在本地做登录框主要是考虑到:登录逻辑复杂,特别是登录异常处理。比如二维码、验证码、短信校验等等,这些如果通过后端对接非常繁琐,外部站点改一下实现就要跟着变,维护工作量巨大。

    登录后我们只需要获取一下关键的 cookie 就行了,然后把这个 cookie 传给内核,后续由内核负责和外部站点的接口进行交互。

    webview

    通过 webview 从 CDN 加载,如果要升级只需要编译并发布 CDN。

    每次启动加载的 HTML 是通过在客户端加入 ?时间戳来引入,也就是说这个文件肯定不会在 CDN 上命中,都是回源加载最新的,CDN 主要是加速其引入的其他资源文件。

    前后端交互

    UI 和内核的交互没有通过传统的 HTTP AJAX 实现,而是统一通过 WebSocket 来实现全双工的异步通讯。这样设计主要是考虑到 BND2 在异步推送的场景比较多,比如全局统计、下载进度统计、反馈内核报错等。

    实现上我们做了一个简单的抽象封装,通过命令模式实现指令分发和执行:

    // WebSocket 消息处理
    m.HandleMessage(func(s *melody.Session, msg []byte) {
        request := map[string]interface{}{}
        json.Unmarshal(msg, &request) // 反序列表指令
        
        cmdStr := request["cmd"].(string)
        cmd := www.zpvv.netmand.www.zpvv.netmands[cmdStr] // 指令路由分发
        param := request["param"].(map[string]interface{})
        
        go cmd.Exec(param) // 异步执行
    }
    

    前端也非常类似,在 ws.onmessage 时分发并执行指令。

    安全性

    桌面软件容易被破解主要是因为整个运行时都是在客户机上,破解者想怎么调试都可以。

    比如破解者可以通过网络抓包对关键的请求接口进行修改,从而影响后续的执行逻辑,这一点可以通过加密请求响应数据来 稍微 加大破解难度。再比如,破解者可以通过反汇编调试,找到并修改关键变量来跳过某些判断检查,这一点可以通过加壳来 稍微 加大破解难度。

    总之,没有绝对的安全,防君子不防小人。

    总结

    本文主要描述了一种现代富客户端技术架构的实现思路,以 BND2 为实例验证了该思路的可行性。

    更进一步,我们可以考虑通过一致性状态分布协议(比如区块链、IPFS)尝试数据存储的分布,从而实现真正意义上的富客户端。这里只是提个引子,之后有新会更。

    • BND

      BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux、Mac。项目已开源,仅供程序员学习交流,不提供可执行文件下载。

      85 引用 ? 1089 回帖 ? 30 关注
    • 架构

      我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

      68 引用 ? 316 回帖 ? 1 关注
    • Electron

      Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

      7 引用 ? 93 回帖
    感谢    关注    收藏    赞同    反对    举报    分享
    优质回帖
    • dx777 ?

      希望再优化下载加速,,,,

    53 回帖    
    请输入回帖内容...
    • alanfans ?      

      1 楼

      感谢    赞同    反对    举报    分享       评论    回复
    • fighter ?      

      2 楼,前排膜拜大佬

      感谢    赞同    反对    举报    分享       评论    回复
    • wojaiyh ?      

      D 大 WIN7(64 位)问题解决了吗?

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      还没有的,稍后我装个虚拟机看看。

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • wojaiyh ?            

      好的 辛苦了 D 大 ```` 期待 ing~~

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      Win7 64 位专业版没问题,你用的是哪个版本?

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • wojaiyh ?            

      40680a565174b8d034136bf1477a67epng

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 1653245326 ?      

      十分感谢 这个软件真的好用

      感谢    赞同    反对    举报    分享       评论    回复
    • zonghua ?      

      emmm,现在的年轻人都喜欢用 Electron 写桌面软件。

      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      我这里刚刚装的 Win7 64 位旗舰版(微软原装镜像)没有问题:

      imagepng

      我猜想可能是你系统的问题,有些安装镜像 SSL 证书库不全导致。

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • youymi ?      

      小小测试了一把,第一次文件夹 11G 下载达到带宽极限,第二次再次下载其他文件夹 限速了,是否是百度有所限制了?

      _20180827230929png

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • wojaiyh ?            

      那一定是我的问题了 ~~??!~~

      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      百度对每日总量有限制。

      感谢    赞同    反对    举报    分享       评论    回复
    • mingan ?      

      亲测有用

      感谢    赞同    反对    举报    分享       评论    回复
    • xtcs ?      

      哇,老大开始研究新版本了。

      感谢    赞同    反对    举报    分享       评论    回复
    • kkk ?      

      BND2 点击下载的时候,要经常选择下载目录,能一次性固定的吗 - -

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      第一次选择后后面都是默认的了。

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • kkk ?            

      我这边的还是得选 每次打开 BND2 都得选 T.T

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      启动时是要选,每次启动不会记录上次使用的设置的。

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • bkasra ?      

      感谢楼主分享

      感谢    赞同    反对    举报    分享       评论    回复
    • zhaohanzhaohan ?      

      感谢楼主,但是满速不久后速度还是降下来了

      感谢    赞同    反对    举报    分享       评论    回复
    • mission ?      

      后排垫脚仰望大佬

      感谢    赞同    反对    举报    分享       评论    回复
    • kkk ?            

      那每次启动一次不是得每次都设置一次 T.T(岂不是很麻烦 T.T)

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      如果设了默认的每次启动有人想换岂不是很麻烦 -_-

      感谢    赞同    反对    举报    分享       评论    回复
    • wpq201800 ?      

      谢谢大神们的努力??!

      感谢    赞同    反对    举报    分享       评论    回复
    • backom ?      

      下载进程很多的时候会异?;郝?,几个小时也才下载几十个文件。重启软件后会清空下载任务,完成记录

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      可以共享到小号上,用小号来下载。

      感谢    赞同    反对    举报    分享       评论    回复
    • vinasis ?      

      厉害厉害!??

      感谢    赞同    反对    举报    分享       评论    回复
    • xjtushilei ?      

      棒!

      感谢    赞同    反对    举报    分享       评论    回复
    • 583413579dy ?      

      感谢大佬们的无私奉献和努力!赞?。?!

      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?      

      下载速度 80KB 跟正常百度网盘一个速度是为什么

      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?      

      大 D 求解决办法啊 第一次使用啊 就是正常百度网盘的下载速度

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      换个账号试试?

      3 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      • - 没有第二个小号了 现在申请都手机号绑定。。。但是第一次用啊 不应该第一次用也把我限制了吧。。

      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      是我打开方式不对吗 - - 我拿我对象百度网盘号重新试了下依旧 100KB 左右。。。

      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      15357053881png

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      单文件的话 BND2 目前效果不好,你试试用 BND1 这个对单文件支持较好。

      2 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      15357060521png

      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      心疼自己 感觉一直下的话 都下完了 - - 会是什么原因导致的呢 家里百兆联通 不应该是网速的原因??? 会是系统的事吗

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      百度对账号有限额,每天大概 10G

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      就很难受 两个账号 今天都是第一次用

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • 88250 ?            

      这个情况我就不知道啦,我自己时不时用下一直是满速。

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • jackfruitran ?            

      一定是百度针对我 哈哈 - - 还好不到 1 个 G

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • Hodpel ?            

      怕是针对的没错了
      会不会是封 IP 之类的…
      之前说的那个限额我也没遇到过啊 之前下一个 7-8G 的游戏下了好多遍(一天)都没怎么降速 很稳定的十兆每秒这边

      感谢    赞同    反对    举报    分享       评论    回复
    • dx777 ?    

      好厉害的程序员!

      感谢    赞同    反对    举报    分享       评论    回复
    • lscn818 ?      

      还没试过这个。用的 bnd1

      1 回复 
      感谢    赞同    反对    举报    分享       评论    回复
    • dx777 ?          

      bnd2 自动匹配 DBUSS 值,有名称和时间排序方便查找下载文件,登录一次后下次启动自动登录个人的百度云盘。测试期间下载不扣分。

      感谢    赞同    反对    举报    分享       评论    回复
    • dx777 ?    

      推荐用 bnd2 啦

      感谢    赞同    反对    举报    分享       评论    回复
    • dx777 ?    

      希望再优化下载加速,,,,

      1 回复 
      感谢    赞同 1    反对    举报    分享       评论    回复
    • w305289896 ?      

      速度应该没问题,感谢

      感谢    赞同    反对    举报    分享       评论    回复
    请输入回帖内容...
  • 朝阳消防联合快递行业开展消防安全宣传培训系列活动 2019-04-05
  • 期待已久的桃花运 竟然可以穿出来?! ——凤凰网房产广州 2019-04-05
  • 中关村雍和航星科技园,北京中关村雍和航星科技园 2019-03-22
  • 潇湘玉竹版主辛苦了! 2019-02-13
  • 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-02-13
  • 工信部:鼓励婴幼儿配方乳企质量安全追溯体系建设 2018-12-30