# PrivateTracker.Service **Repository Path**: platform-group/PrivateTracker.Service ## Basic Information - **Project Name**: PrivateTracker.Service - **Description**: 一个基于.Net Core的BitTorrent服务,后台基于Admin.NET开发。 - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2022-04-12 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PrivateTracker.NET #### 介绍 一直来混迹于各大资源站,处于好奇结识了GITHUB上开源的资源站项目NexusPHP,至此便诞生了.Net Core版本此项目雏形。 QQ交流群:491223919 欢迎各位大佬参与贡献。 #### 知识扫盲 什么是 BT Tracker BT下载过程当中,我们如果拿到一个种子文件,在其内部会包含一组BT Tracker 服务器信息。 在开始进行下载的时候,BT 下载工具会根据种子内的唯一 HASH 码请求 Tracker 服务器,之后 Tracker 服务器会返回给正在 下载/做种 的 Peer 信息,下载工具获得了其他的 Peer 信息之后就会与其他的 Peer 建立通讯下载数据。 整个过程的时序图如下 ![41bf46a213fe18fbeb573e9ab15d70ae.png](https://img-blog.csdnimg.cn/img_convert/41bf46a213fe18fbeb573e9ab15d70ae.png) 在这里 BT Tracker 充当的角色就是一个通讯员的角色,它的构造很简单,最简构造的情况下只需要一个 HTTP API 接口即可。其作用就是在 BT 下载工具请求 Peer 信息的时候,返回相应的信息即可。 一般有http和udp两种 - `info_hash`:元信息文件中 20 字节的 SHA-1 散列值。注意此值会进入编码字典中,如上述的信息关键字的定义所述。与不需编码的 peer_id 相比,它总是被 URL 编码。 - `peer_id`:客户端 ID ,客户端用来唯一标识自己 ID 的 20 字节的串,它在客户端启动时生成。允许为任何值,包括二进制数据。目前没有特定的算法来生成客户端 ID。但是,人们会认为它至少对于自己的本地机器是唯一的,从而应该像进程 ID 一样合并数据,也可能在启动时由时标记录。见本区域下面的一般客户端编码的 peer_id。 - `port`:客户端监听的端口号。BitTorrent 所使用的典型端口是 6881-6889。如果此范围的端口都无效,可以选择其他的。 - `uploaded`:从客户端发送“已开始”事件到服务器算起的上传总量,数值采用 10 进制的 ASCII。对于没有在官方规范明确指出的,该值应为已上传的字节总数。 - `downloaded`:从客户端发送“已开始”事件到服务器算起的下载总量,数值采用 10 进制的 ASCII。对于没有在官方规范明确指出的,该值应为已下载的字节总数。 - `left`:客户端需要下载的字节数,以 10 进制 ASCII 编码。 - `no_peer_id`:客户端接受一个紧密的响应。客户端列表由客户端串代替,此串中每个客户端都编码成 6 字节。前 4 字节是主机名(以网络的字节顺序),后两个字节是端口号(同样以网络字节的顺序)。 - `event`:如果被指定,则是**已开始**,**已完成**,**已停止**中的一个,或者为空(表示未指定)。如果未指定,此请求为常规时间间隔中的一次运行。 - - `started`:向服务器发送的第一个请求,必须包含开始值的事件关键字。 - - `stopped`:如果客户端关机则须发送到服务器上。 - - `completed`:完成下载时必须发送到服务器上。但是,当客户端启动时下载完成度为 100%(即:做种中)则不会发送。可能这是允许服务器增加“已完成下载”的方法。 - `ip`:可选。客户端的真实 IP 地址,以点分四元组格式或 RFC3513 中定义的 16 进制 IPv6 地址。注意:大体上此参数没有客户端地址重要,它能由 IP 地址决定,HTTP 请求也来自该处。仅在请求参与的 IP 地址不是客户端的 IP 地址的情况下才需要。这种情况发生在客户端通过代理服务器与服务器进行通信的情形。当客户端和服务器同时处在本地 NAT 网关时也需要。原因是服务器会发出客户端的内部地址(RFC1918),这是不可到达的。所以客户端必须清楚地把自己的外部可到达的 IP 地址发送到其他客户端中。不同的服务器对此参数的解释有所不同。某些只有当请求参与的 IP 地址属于 RFC1918 时才允许。有些无条件允许,但有些则完全忽略。如果使用 IPv6 地址(如:2001:db8:1:2::100),则表示客户端能通过 IPv6 进行通信。 - `numwant`:可选。客户端想从服务器接收的用户数目。允许此值为“0”。如果不用此项,则默认值为 50 个用户。 - `key`:可选。一个不与任何用户共享的另外的标识。当 IP 地址改变后,允许客户端证明它们的标识。 - `trackerid`:可选。如果先前发布包含服务器的 id,它应放在这里。 扫盲参考链接: https://www.jianshu.com/p/159c647c0095 http://blog.chinaunix.net/uid-26548237-id-3056731.html #### 项目进展 - [x] tracke服务端(简易) - [ ] 种子发布 - [ ] 积分制度 - [ ] 获取IMDB #### 食用方法/演示 服务Swagger: http://49.232.201.231:8888/ tracker地址:http://49.232.201.231:8888/announce 1、创建制作种子,此以UT为例 文件-添加Torent ![输入图片说明](README.assets/3432423%E5%8D%A123.png) Tracker填入demo中的Tracker地址http://49.232.201.231:8888/announce 勾选开始做种并创建另存为 ![image-20220101192457762](README.assets/image-20220101192457762.png) 3、将种子发送给你的小伙伴,你的小伙伴即可下载,前提的网络具有公网(并非固定IP),如下已在做种中 ![输入图片说明](README.assets/image-20220101192831488.png) 4、如下另一客户端下载已正常 ![image-20220101193356225](README.assets/image-20220101193356225.png) #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request