# Bittorrent **Repository Path**: grapefruitof/Bittorrent ## Basic Information - **Project Name**: Bittorrent - **Description**: 此仓库用于记录Bittorrent协议族的解析、响应模块。有很多的bug,但是恰好能运行,仅供参考。 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-06-27 - **Last Updated**: 2024-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Bittorrent协议族解析 本程序对Bittorrent协议族 - Tracker通信协议:HTTP格式,UDP格式 - DHT协议:KRCP - Peer节点通讯协议:TCP模式,UDP模式 - Utp协议 进行了识别与特征提取。 ## 文件结构 各个文件夹下是对应协议解析的函数 BitCometTracker_jb51.rar是Tracker软件的压缩包,内有使用说明 peer_match_test.py是运行文件 ## 总体方案 使用python库scapy进行数据包的捕获。 对捕获的数据包进行**应用层协议分析**,还原字节序列(bytes)为协议特征(此处使用字典存储每一个**应用层级别的数据包**特征)。 例如: ``` [{'Type': '0', 'Version': '1', 'Extension': 0, 'Connection Id': 8000, 'Timestamp Microseconds': 425320392, 'Timestamp Difference Microseconds': 2295421527, 'Window Size': 1048576, 'Sequence Number': 42831, 'ACK Number': 56978}] ``` ## 解析过程 ### 要点一:由于我们是在应用层进行协议分析 因此,一个传输层协议包可能含有多个应用层协议包,一个应用层协议包可能位于多个传输层协议包。 我们的解决方法是:首先部分匹配当前数据包,解析出应用层数据包长度数据L(根据协议,他会被定义在数据包前几个字节),根据解析出的数据包长度L,切割数据包并进行详细解析。如果剩余数据长度<定义的数据包长度L,那么缓存剩下的数据segment。当下一个包来时,进行拼接,然后详细解析。 **在该程序中,我们实现了解决方法。** 使用python字典*{key = (ip.src,ip.dst), value = segment}*(假设一个ip不会 使用多个端口进行数据传输,当然也可以在key加上端口) ### 要点二:TCP或UDP传输过程中可能出现乱序的情况 - 例如,我们可能收到这样的TCP序列:23564,我们需要还原其为正确的序列:23456(真实情况应该为seq和ack序列) 对于这情况,我们判断当前的数据包是否位于正确的接收序列,如果不是,依然缓存他(就像例子中的56),当序列正确的数据包到达时,我们解析他(就像例子中的4),并判断缓存中的数据包当前是否是正确序列(就像例子中的56,此时他们可以被正确解析)。 **在该程序中,我们没有实现解决方法。** ### 实现过程 输入:数据包 1.进行http的匹配,如果匹配成功,则说明是Tracker通信的http模式,return;否则进入2. 2.记录该数据包的IP(V4或V6),用于记录该数据包的传输方向。如果该包是TCP包进入3. ;如果该包是UDP包进入4. 3.进行TCP解析,TCP模式下,该数据包只有Bittorrent协议包是我们需要解析的。根据**要点一**,我们首先判断该传输方向是否缓存有报文段,如果有,那么先进行报文拼接。然后进行协议解析,如果是Bittorrent,return。否则return none。 4.进行UDP解析,UDP模式下,数据包有DHT协议、UTP协议、Bittorrent协议需要解析。一个DHT协议或UTP协议数据包只会存在于一个UDP数据包中。我们首先进行DHT解析,成功则return。否则进行UTP解析,如果UTP特征不为0,return;否则进行Bittorrent协议解析(如TCP),return。 ## 参考文献 官方协议文档: [bep_0000.rst_post (bittorrent.org)](http://www.bittorrent.org/beps/bep_0000.html) HTTP——Tracker的中文解析 [BitTorrent协议规范Tracker HTTP/HTTPS协议(3) - 数据安全-Chinaunix](http://bbs.chinaunix.net/thread-3643071-1-1.html) DHT概述 [DHT Protocol:BitTorrent DHT 协议中文翻译 | justjavac(迷渡)](https://justjavac.com/other/2015/02/01/bittorrent-dht-protocol.html)