认真的做羞羞的事 一颗种子的自我分享

简介: 我是一颗种子。 叮,叮。。。某雷的下载完成提示音,大家应该还不陌生,上学时下课后宿舍内尽是叮叮叮有木有。。。 “叮”有时候是结束的标志, 也可能是隐私娱乐开始的暗示,毕竟下载完成就可以干自己的事了。。。 少年们在我面前,是没有秘密的。。。 在人类的世界里,互联网除了承载电商,交友,还承载了巨量的娱乐内容,隐私的娱乐,我的存在,要感谢互联网,感谢P2P。 那年还在花开的少年

我是一颗种子。
叮,叮。。。某雷的下载完成提示音,大家应该还不陌生,上学时下课后宿舍内尽是叮叮叮有木有。。。

“叮”有时候是结束的标志, 也可能是隐私娱乐开始的暗示,毕竟下载完成就可以干自己的事了。。。

少年们在我面前,是没有秘密的。。。

在人类的世界里,互联网除了承载电商,交友,还承载了巨量的娱乐内容,隐私的娱乐,我的存在,要感谢互联网,感谢P2P。

那年还在花开的少年们,尽情享受P2P带来的红利。

私娱是一件伟大的事,是一件绽放人性的过程。然而一切的一切,都要始于一个文件,那就是我。

为了找到一个或者一种类型种子,有多少少年曾经通宵去认真研究电驴,P2P Search,某雷的玩法甚至协议。。。

image.png

上面这条流程谁没走过站出来秀一波。。。从前往后越来越黄,少年在不归路上越走越远。


种子里有什么

主人创建我的时候,会在考虑什么呢, 标题,介绍,谁主演的?

歇会先,先给大家普及下P2P吧,别搞错,这不是跑路的P2P。


P2P的世界

P2P的世界是如何构成 的

image.png

要去下载内容,得知道从哪下载, tracker service承担了这个查询的活。

在P2P世界里,少年们原理上是平等的, 下载了别人的文件,也就自动提供了被下载的能力。如何让别人知道有这个文件,只需要告诉tracker service。

image.png

在P2P的世界里,我是一个连接器。
我的个人介绍里有其对应的tracker server地址。

image.png

除此之外,还有概要信息

image.png


端到端的连接

端到端通过tracker service知道对方后,相互连接并交换信息与文件。

网络情况太危险了,充满了各种危险与欺诈,黑客们可能想把病毒伪装成文件供别人下载,因此

规则设计需要对文件进行校验。

当下载完成时需要对文件的hash值与种子文件中的hash值进行比较,这样如果下载的内容不是想要的,则会校验失败。

随着生活质量的提高, 人们对内容的高清的追求不断提高,如果一个番号有十几个资源,在网速允许的情况下,最高清的会是

终极目标,有时宁愿多花几个小时,这也许就是人性吧。。。

这便有了一个问题,少年花了一天的时间下载了10G的avi, 最后校验失败, 撸管失败。。。

于是校验开始切片化,将一个文件切成一片片的,每256K校验一下,少年从此不用担心下错的问题。

我提供了文件与文件切片的校验值

image.png

校验值,每段40个字节
image.png


一颗种子的自我解码

既然我知道so 多真相,是不是很牛B,有多少少年第一次接解 牛 B是从我开始, 所以我的自我的编码叫B编码吧, 翻译过去叫bencode.

言归正传,上面的截图可以看到很多的列表,比如文件列表,切片列表,tracker列表,所以B编码中需要包含对列表的处理,

此外还有KV型(key-value) ,俗称字典型。以及整型,字符串。


简单点

整型: i3e 代表3

列表型: l[列表内容]e

KV型: d[KV列表]e

字段: 6:yellow 表示yellow, 长段摆在前面。

比如d4:lovel6:yellow6:beautyee 代表有一个KV, K=love, V是个列表,包含"yellow"与“beauty”。


实现一个牛B解码

代码这个事,有点枯燥,哎哟,这个事怎么说起呢。。。

在编码上,其实我是一个由很多KV组成的字典(dict),[name:..., comment:...], 所以咱们就从解析开始dict开始:

image.png

咱们将这个字典打印出来:

image.png

image.png

整理一下:
image.png

着重介绍下对KV的解码:

解析KV的value:func (d Decoder)parseKV(dict BDict, key *string)(bool)

image.png

如果是字符串,比如5:hello则调用parseSingleString来解析,如果是list则调用下面的代码解析列表。

image.png

再如下面的字符串与整形的解析

image.png

解析list的与dict方法类似

func (d Decoder)parseList()(BList, bool)

func (d *Decoder)parseList()(*BList, bool){
    d.pos++
    d.level++
    var ls = &BList{}
     
    for d.pos < d.size {
        c := d.data[d.pos]
        if c == 'd' {
            dc, r := d.parseDict()
            if !r {
                log.Println("parse dict failed")
                return nil, false
            }
            ls.Eles = append(ls.Eles, dc)
        }else if c == 'i' {
            i, r := d.parseInt()
            if !r {
                log.Println("parse dict failed")
                return nil, false
            }
            iv := &BInt{
                V : i,
            }
            ls.Eles = append(ls.Eles, iv)
        }else if c == 'l' {
            l, r := d.parseList()
            if !r {
                log.Println("parse list failed")
                return nil, false
            }
            ls.Eles = append(ls.Eles, l)
        }else if c >= '0' && c <= '9' {
            s, r := d.parseSingleString()
            if !r {
                log.Println("parse string failed")
                return nil, false
            }
            vs := &BString{
                V : s,
            }
            ls.Eles = append(ls.Eles, vs)
        }else if c == 'e' {
            d.pos++
            break
        }
    }
    d.level--
    return ls, true
}

可能会有多重嵌套,比如key:[list], list再包含一个dict等等,因此将各函数定义为func() value的形式会有利于实现。

最终将dict转成我们想要的各式:

func (d BDict) handle() TorrentInfo

image.png


P2P的工作流程

不知道有多少人会认真的读到这里,唉少年们这快进快退的习惯可能也曾经与我的文化有关吧,毕竟看片多了自然也就习惯了快进与拖的人生。

我是怎么产生作用

image.png

最后,想了解我就请继续关注我吧。

目录
相关文章
|
JSON Java API
LAZADA平台API文档示例
LAZADA平台API文档示例
1021 0
|
存储 编解码 监控
G-Code 详解
玩过一段时间3D打印机的朋友,都会接触到G-code文件。所谓G-code文件, 指的是3D模型在进入3D打印机实际打印之前,必须要经过切片器处理而成的一种中间格式文件。
6829 0
|
Web App开发 JavaScript 前端开发
前端接收数据流实现图片预览效果--ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践
本文为转载文章 原文链接:https://www.cnblogs.com/cdemo/p/5225848.html 首先要谢谢这位大神的无私贡献!解决了我的问题也完美表达了我当时的心路历程 ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践 写在前面 :从提出需求到完美的解决问题,实现过程是曲折的。
8730 0
|
9月前
|
存储 固态存储 应用服务中间件
2026年阿里云服务器最新收费标准与活动价格,轻量云服务器38元起,云服务器99元起
2026年截至目前,阿里云服务器的活动价格与2025年12月相比没有太大的变化,阿里云针对各类用户需求,继续推出不同种类的云服务器相关活动,目前购买轻量应用服务器2核2G200M带宽38元1年,经济型e(ecs.e-c1m1.large)实例ECS2核2G3M带宽优惠价99元1年。本文将介绍阿里云服务器截止目前最新的收费标准以及活动价格情况,以及在选购过程中针对云服务器实例规格、带宽、云盘等配置的一些注意事项,以供选择和参考。
|
7月前
|
人工智能 运维 安全
基于云边协同的电线电缆押出机智能调机解决方案设计与落地
本方案基于云边协同架构,融合阿里云云原生技术,破解线缆行业押出机调机效率低、原料损耗高、数据孤岛等难题;边缘毫秒级实时控制+云端Al训练优化,实现调机提效80%、降耗60%,部署快、运维省、可扩展
708 9
基于云边协同的电线电缆押出机智能调机解决方案设计与落地
|
7月前
|
人工智能 安全 Linux
阿里云/本地部署OpenClaw 构建高效AI智能体指南:技能编排+千问大模型/免费Coding Plan API配置jiao c3
很多人使用OpenClaw效率低下、频繁报错、智能体表现不稳定,根本原因不是工具本身不够强,而是停留在“盲目安装Skill”的零件思维,没有建立真正的**系统工程思维**。一个健康的OpenClaw系统,必须遵循公式:**有效能力 = 底座能力 × 场景能力 × 稳定执行**。只堆砌技能而忽略底座,就像给团队配齐顶级设备却没有流程、安全、记忆与复盘,最终只会陷入冲突、卡顿、幻觉与低效。
512 0
|
7月前
|
人工智能 Cloud Native Java
深耕三十载,焕新向未来——Java语言的发展之路与时代新篇
在技术迭代日新月异的今天,有一门语言自1995年诞生以来,历经三十年风雨洗礼,始终稳踞企业开发核心阵地,从桌面应用到云端架构,从移动终端到人工智能,它的身影无处不在,这就是Java。
1102 0
|
9月前
|
人工智能 数据可视化 算法
构建AI智能体:九十六、基于YOLO的智能生活助手:食材识别、植物健康与宠物行为分析
本文介绍了YOLO目标检测模型在智能厨房、植物健康监测和宠物行为分析等生活场景中的应用。通过实际代码示例,展示了如何利用YOLO实现食材识别、菜谱推荐、植物病害判断及宠物姿态分析,体现其高效性与实用性,助力构建智能化生活助手。
385 3
|
消息中间件 监控 网络协议
什么是中间件?
一、为什么要中间件 计 算机技术迅速发展。从硬件技术看,CPU速度越来越高,处理能力越来越强;从软件技术看,应用程序的规模不断扩大,特别是Internet及WWW的出 现,使计算机的应用范围更为广阔,许多应用程序需在网络环境的异构平台上运行。
2208 96
在Gazebo中添加悬浮模型后,利用键盘控制其移动方法
今天讲一下如何通过键盘来控制其移动:监听键盘输入并根据按键调整模型的位置,然后通过调用set_model_state函数来更新模型在Gazebo中的状态
1063 0

热门文章

最新文章