问题标签 [bencoding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
399 浏览

encoding - 如何对非ASCII字符串和非整数进行编码?

根据编码规范

Bencoded 字符串编码如下:<string length encoded in base ten ASCII>:<string data>, 或key:value 请注意,没有恒定的开始分隔符,也没有结束分隔符。

示例:4:spam 表示字符串“spam”
示例:0:表示空字符串“”

整数编码如下:i <integer encoded in base ten ASCII>e 初始i和尾随e是开始和结束分隔符。您可以有负数,例如i -3 e。只能使用有效数字,不能用零填充整数。例如i 04 e。但是,i 0 e是有效的。

示例:i 3 e表示整数“3”


我的问题

问题 1:我应该如何使用非 ascii 字符对字符串进行编码?例如:mûrier或者die höhe Zeit我应该将这样的字符串转换为字节序列,使用UTF-8编码还是另一种?它如何应用于规范?

问题 2:如何对非整数数字进行编码,例如1.0002910or -0.0049172

0 投票
1 回答
329 浏览

python - 使用 Debian 在 Python 中进行 Bencode?

我正在尝试将 bencode 放在我的 debian 上以解码一些 bittorrent 数据,但我不知道如何从这样的链接中做到这一点,例如: https ://pypi.python.org/pypi/bencode/ 1.0

我下载了与我的版本相对应的包,即 py2.7,但后来我不知道如何处理这个 zip,除了解压缩它。

我的目标是在我的脚本中调用 bencode ,from bencode import *并像大多数网站一样使用“解码”来展示如何做。不幸的是,它与 bencode 安装不一样,因为互联网上没有教程。

谢谢你的时间。

0 投票
1 回答
1054 浏览

python - 如何干净地导入bencode?

我正在尝试使用 bencode 库中的 bdecode ,也就是说:

位于 init 中:

在此处输入图像描述

但是使用我的代码 de,由于错误,我无法得到任何结果。确实导入找不到 bdecode 但我不明白为什么。这是简单的代码和错误输出:

在此处输入图像描述

有关 bencode 安装的信息,我刚刚做了“pip install bencode”

0 投票
2 回答
5998 浏览

python - 如何解码经过编码的 torrent 数据

我正在尝试从 torrent 文件中提取大小和名称,并使用 bencode 解码 torrent 文件的内容。

我做了pip install bencode然后我用一个种子文件的一行进行了测试,你可以在那里看到。

这是 pip install 放在 python 库中的文件:

事实是我真的不明白如何用这个 bencode 解码我的线路。

我已经尝试过 defbdecode但这是输出:

所以我尝试使用 defdecode_stringdecode_string(blabla, 1)它只解码第一个单词:

并且像 2、3、4 这样的数字不起作用并显示如下错误:

我想解码所有行,但我不明白如何使用这个 bencode 来做到这一点。

0 投票
1 回答
482 浏览

java - java中的编码字符串长度

我对编码有点困惑。

根据规范,当我对字符串进行编码时,我需要使用以下格式:

长度:字符串

字符串垃圾邮件变成4:spam

我的问题:4是编码字符串的符号数量,还是 utf-8 字节的数量?

例如,如果我要对字符串gâteau进行编码

应该指定什么数字作为该字符串的长度?

我想我必须指定7,最终形式应该是7:gâteau

这是因为符号â按照utf-8编码占用了2个字节,而这个字符串中的所有其余符号按照utf-8编码占用了1个字节。

另外我听说不建议将编码数据存储在 java String 实例中。

换句话说,当我对数据块进行编码时,我应该将其存储为字节数组,并且不应将其转换为 java String 值以避免编码问题。

我的假设正确吗?

0 投票
1 回答
4663 浏览

c# - 解码 (BEncode) 种子文件

您好,我正在使用 C# 在 VS15 中制作控制台应用程序。

如何解码 torrent 文件?要获取 torrent 文件的名称、大小和日期?我想从服务器下载一个 torrent 文件,然后对其进行解码以查看名称、大小和日期。到目前为止,我可以使用 WebCLient 下载文件,但我已经搜索并搜索如何解码 torrent 文件,但没有运气。

我已经尝试过这个库并做到了:

但我不太明白字典给了我什么?我想在控制台中输出种子信息。

0 投票
1 回答
48 浏览

bittorrent - KRPC query message dict mysterious prefix

My torrent client DHT implementation frequently receives KRPC dict messages with 4 extra bytes before the message dictionary. Here is an example:

Following that, is a bencoded dict, d, the contents, and then e, per the specification.

It appears the dictionary following the 4 bytes seems to always contain a y of q, so they're presumably queries.

0 投票
0 回答
71 浏览

windows - 从 torcache 下载种子时,cURL 使编码无效

标题说明了一切。我意识到在https://askubuntu.com/questions/307566/wget-and-curl-somehow-modifying-bencode-file-when-downloading/310507#310507上提出了类似的问题,但我不认为相同的解决方案有效,因为我尝试使用 7zip 和 Gzip for windows ( http://gnuwin32.sourceforge.net/packages/gzip.htm ) 解压缩文件。两者都声称该文件格式错误。将其扩展名重命名为 .gz 或 .zip 也无济于事。--compressed 属性也无济于事。所以,我的猜测是在 torcache 网站上发生了一些变化。我也尝试过使用用户代理,但无济于事。

在一个相关问题中,我想,当我尝试从 https 站点下载时,我收到“curl: (52) Empty reply from server”。只有 http 有效,这给了我无效的编码。当我在浏览器上输入 URL 时,torrent 文件会自行下载。

我输入的命令如下:

curl -O http://torcache.net/torrent/006DDC8C407ACCDAF810BCFF41E77299A373296A.torrent

0 投票
1 回答
121 浏览

c# - BEncode.net urllist 为空

我想从仅使用网络种子的无跟踪器洪流中获取 url-list 的值。

我写了这个

但这不起作用,因为 urllist 为空。如何获取 url-list ?

0 投票
2 回答
331 浏览

node.js - BitTorrent 协议有问题

我正在尝试为学校项目制作一个简单的 BitTorrent 跟踪器。它现在完全被破解了,但我找不到哪里出错了。我想知道我是否对服务器响应应该是什么有误解。我正在使用 node.js 和 express。

服务器接收带有 ?info_hash 数据的 /GET 请求没有问题。而且我能够将该信息保存到 JSON 文件中。服务器还能够使用编码响应客户端。响应是一个字典,它有一个间隔和一个对等列表。列表里面有几个字典,每个字典都包含一个对等点的 ip 和端口。

目前,虽然没有一个对等方将相互连接。我将把我的笔记本电脑放在与我的桌面不同的网络上,它会将桌面视为潜在的对等点、正确的 ip 和端口(据我所知),但过了一会儿它就会从对等点列表中删除。我在每个客户端上都使用 deluge 和 qBitTorrent。

这是应用程序的代码:

我能够连接到托管在 Amazon AWS 上的跟踪器,并且 qBitTorrent 将其报告为“工作”。我还可以看到 GET 请求发出,服务器响应通过 wireshark 进入。该请求具有以下经过编码的字符串,我认为这是必要的:

根据 www.bittorrent.org 的说法,响应中所需的只是一个间隔和一个映射到对等点列表的对等点列表。每个对等点都需要 id、ip 和端口。

我已将端口切换到客户端在请求中报告的端口,并确保我的 torrent 客户端已转发它的端口并且它现在似乎正在工作。虽然我仍然会继续努力。目前,当他们停止播种/吸血时,我没有办法删除同行。