我已经实现了一个 python 模块,该模块使用 python scrapy 抓取两个 torrent 站点。 \n它当前将 torrent 数据存储在数据库中,并且能够通过调用下载 .torrent 文件的 bash 脚本来下载 torrent 文件。
\n\n出于数据库可视化研究的目的,我想知道是否可能,如果可以,如何获取特定 torrent 文件的 IPseeders地址peers。我想创建一个可视化效果来查看 torrent 文件及其类型(电影、iso 图像、书籍等)与它们播种/同行下载的位置之间的相关性。
例如,这是我抓取的 .torrent 文件之一的内容:(只是其中的一部分)
\n\nd8:announce38:udp://tracker.publicbt.com:80/announce13:announce-listll38:udp://tracker.publicbt.com:80/announceel44:udp://tracker.openbittorrent.com:80/announceel35:udp://tracker.istole.it:80/announceel36:udp://open.demonii.com:1337/announceee7:comment61:Torrent downloaded from torrent cache at http://torcache.net/10:created by15:BitTorrent/782013:creation datei1384198882e8:encoding5:UTF-84:infod5:filesld6:lengthi25485e4:pathl69:Physics of Quantum Mechanics, The - Skinner, David, Binney, James.jpgeed6:lengthi1254e4:pathl69:Physics of Quantum Mechanics, The - Skinner, David, Binney, James.opfeed6:lengthi4609366e4:pathl69:Physics of Quantum Mechanics, The - Skinner, David, Binney, James.pdfeee4:name52:The Physics of Quantum Mechanics- Oxford, 2013 [PDF]12:piece lengthi16384e6:pieces5660:\xc2\xb3\xc3\xa9^G^W^H<83>\xc3\xa6Z\xc3\xa8\xc3\x96unB2\xc3\xa4<82>\xc2\xaab\xc2\xad<96>".\xc3\x8bWv\xc3\x93o^?.F\xc2\xb4<8e>\xc3\x8dZQQ\xc3\x95\xc2\xac8\xc3\x9e+\xc3\xbeXS<91>-S^O9<91>\xc2\xb8<9f>\xc3\x8a\'<97>3\xc3\x8ep\xc3\x95\xc3\xb6C^CN\xc3\x9e\xc3\x94\xc2\xbb^F3HJ,=\xc3\x80\xc3\xb2\xc3\xa0\xc2\xb6,<81><\xc3\xb6<84><8a>\xc3\x83\xc3\x80d\xc3\x94,^S\xc3\xbdZ<8f>!Q"r\xc2\xb9<98>\xc2\xb3Ag\xc3\xac=\xc3\xbbr"ged<96>\xc2\xbd<89>\xc3\xa0 \xc2\xa5E\'\xc3\x85^V|\xc3\xaf\xc2\xaa{^M<88><9c>\xc2\xbbz\xc2\xbd/qs\xc3\xb8<^8^@\xc3\xad\xc2\xa4\xc3\x94[_<83><9e><97>\xc3\x89\xc3\xa3s^V\xc3\x97\xc2\xbb\xc3\x96\\\xc3\x9b\xc3\xab"^N\xc3\x9d\xc3\xb3<9e>\xc2\xac^Kb\xc3\xac\xc2\xab\xc3\xb5<98>\xc2\xb2<82>^\\_P\xc3\x8dF\xc2\xaa^_\xc2\xb5^L<9b>^V\xc3\xa2^Nh\xc3\x9b<87>-@\xc3\xaa\\\xc3\xad\xc3\xa4\xc3\x8e/\xc2\xb3<8c>^]j\xc3\x80\xc3\xb3p<87>\xc2\xac …
我试图了解 Kademlia 如何寻找资源。现在有很好的描述来构建最接近自身节点的节点树,如何找到节点之间的距离,如何启动该过程等。我不明白的是文件 infohash 如何适合这张图片。所有描述都告诉我们如何进入游戏并构建自己的分布式哈希表部分,但事实并非如此。我们这样做是为了实际查找资源,即具有特定信息哈希的文件。它是如何存储在这个节点树中的还是有一个单独的?如何找到具有此 infohash 的节点,从而获得该文件。
简要提到了这样一个事实,即节点 id 和 infohash 具有相同的 20 字节长度代码,并且节点 id XOR infohash 是节点和资源之间的距离,但我无法想象这是如何以及它如何帮助找到资源?毕竟,实际拥有该资源的节点id可以与该资源具有最大的异或距离。
谢谢你,亚历克斯
我正在制作一个类似于 The Pirate Bay、Kickass.to 等的 BitTorrent 跟踪器/网站。有必要在索引和 torrent 页面中检索 torrent 统计信息(播种器、下载量)。例子:
http://kat.cr/ubuntu-15-04-vivid-vervet-desktop-amd64-iso-final-t10550003.html
播种者:3442 水蛭:148
如果 torrent 使用我的跟踪器,则可以轻松快速检索两个页面的数据。但是,如果 torrent 使用不同的跟踪器,我需要从所述跟踪器中抓取其统计信息(向其发出请求),但这通常需要每个 torrent 几秒钟的时间,显然,我不能让用户等待很想看到清单。
我制作了一个脚本,可以抓取在后台运行的最新 90 个种子,但恐怕这还不够。网站将会发展壮大,种子总数可能会超过 5000 个。我认为在后台抓取那么多种子是行不通的。
我怎样才能做到这一点?
根据维基百科文章,微传输协议支持使用 UDP 打洞进行 NAT 穿越。但是查看libutp 的项目页面,我在头文件中找不到任何此类引用。我错过了一些明显的东西吗?或者NAT穿越是在其他地方实现的吗?
有人能否澄清主线DHT规范中的陈述?
在将第一节点插入其路由表中并且此后启动时,该节点应该尝试在DHT中找到与其自身最近的节点.它通过向更近和更近的节点发出find_node消息来做到这一点,直到找不到更近的节点.
什么"直到它找不到更近"是什么意思?
当我的程序开始发送find_node消息时,它有空的节点集.对find_node消息的每个响应都返回大约8个dht节点.我的程序在列表中收集它们.
我的程序何时必须停止发送查找节点消息?
我认为它必须停止发送它何时会收到dht节点的集合,其中所有元素都在已经收集的节点列表中?
我对吗?
先感谢您.
我有一个磁链接(例如:磁铁:?xt = urn:btih:1c1b9f5a3b6f19d8dbcbab5d5a43a6585e4a7db6)作为字符串包含在变量中,并希望脚本打开处理磁力链接的默认程序,以便它开始下载torrent(如果我从文件管理器中打开了一个磁铁链接.
为了使答案清楚,我们会说我们在一个变量中有磁链接magnet_link.
我想(通过PHP)收集当前正在下载的info_hashes或搜索DHT.
我见过BTDigg,它使用DHT作为搜索引擎,我想做类似的事情.
此外,在我得到哈希后,如何将哈希转换为洪流,以便我可以获得诸如标题等信息?(再一次通过DHT使用PHP).
我尝试先研究 - 查询DHT服务器尝试通过PHP运行DHT查询,我尝试进行修改,但我没有运气.我也尝试了http://projects-deim.urv.cat/trac/p2pweb/browser/trunk/dht/dht_agg?rev=1但它给了我几个错误,经过多次修复之后它仍然没有用.
我正在使用C++来解析torrent文件的信息哈希,与此站点相比,我无法获得"正确"的哈希值:
我构建了一个非常简单的玩具示例,以确保我有正确的基础知识.
我在sublime中打开了一个.torrent文件并删除了除信息字典之外的所有内容,所以我有一个如下所示的文件:
d6:lengthi729067520e4:name31:ubuntu-12.04.1-desktop-i386.iso12:piece lengthi524288e6:pieces27820:¡´E¶ˆØËš3í ..............(more unreadable stuff.....)..........
Run Code Online (Sandbox Code Playgroud)
我读了这个文件并用这段代码解析它:
#include <string>
#include <sstream>
#include <iomanip>
#include <fstream>
#include <iostream>
#include <openssl/sha.h>
void printHexRep(const unsigned char * test_sha) {
std::cout << "CALLED HEX REP...PREPPING TO PRINT!\n";
std::ostringstream os;
os.fill('0');
os << std::hex;
for (const unsigned char * ptr = test_sha; ptr < test_sha + 20; ptr++) {
os << std::setw(2) << (unsigned int) *ptr;
}
std::cout << os.str() << std::endl << std::endl;
}
int main() {
using namespace std;
ifstream …Run Code Online (Sandbox Code Playgroud) 我需要在nodejs中设置一个示例bittorrent跟踪器,播种器和leecher.我已经写了所有代码,但它不起作用,我不知道为什么.我使用bittorrent-tracker启动了一个跟踪器,使用nt编写了torrent文件,并使用bittorrent-tracker作为播种器连接到跟踪器(bt-tracker同时具有客户端和服务器).
最后,我启动了另一个只有torrent文件并连接到跟踪器的客户端.我能够看到torrent中的文件(在download/leecher客户端中).但文件下载本身不会启动.
正在使用的代码://跟踪器:
var Server = require('bittorrent-tracker').Server
var port=6881
var server = new Server({
udp: true, // enable udp server? [default=true]
http: true // enable http server? [default=true]
})
server.on('error', function (err) {
// fatal server error!
console.log(err.message)
})
server.on('warning', function (err) {
// client sent bad data. probably not a problem, just a buggy client.
console.log(err.message)
})
server.on('listening', function () {
console.log('tracker server is listening!')
})
// start tracker server listening!
server.listen(port)
// listen for individual tracker messages from …Run Code Online (Sandbox Code Playgroud) 如果您创建使用分布式哈希表(DHT)的新应用程序,则需要引导p2p网络.我有一个想法,你可以加入现有的DHT(例如Bittorrent DHT).
这可行吗?当然,我们采用相同的技术.将Chord与Kademlia结合使用显然是不可行的.
如果是的话,这会被认为是寄生的还是共生的?寄生意味着它与某种原始用途发生冲突.共生,如果它们对两种应用都有好处,因为它们相互支持.