使用来自的torrent文件
http://torrent.ubuntu.com:6969/
Run Code Online (Sandbox Code Playgroud)
我正在计算其与页面上的哈希匹配的哈希值.
然后我向跟踪器发出请求.喜欢
http://torrent.ubuntu.com:6969/announce?info_hash=9a81333c1b16e4a83c10f3052c1590aadf5e2e20
Run Code Online (Sandbox Code Playgroud)
但我明白了
d14:失败原因63:请求下载未被授权与此跟踪器一起使用
根据规格,这应该工作?
我有大文件移动到很多服务器.现在我们使用rsync,但我想尝试使用bittorent.
我正在研究Deluge的代码,这是一个Python bittorent客户端,但它使用扭曲并且非常复杂.你知道什么高水平吗?
编辑:我刚刚看到Facebook使用Bittorent进行代码部署.也许他们为此发布了他们的lib,但我找不到它.听说过吗?
我一直试图创建一个洪流网站,但我坚持以下.如何发送洪流刮取请求以获取其播种机和leechers?
我有一个PHP类函数,它提供了我的通知列表.
public function getTrackers() {
// Load tracker list
$trackerlist = array();
if ( $this->torrent->get_value('announce-list') )
{
$trackers = $this->torrent->get_value('announce-list')->get_plain();
while ( list( $key, $value ) = each( $trackers ) )
{
if ( is_array( $value->get_plain() ) ) {
while ( list( $key, $value2 ) = each( $value ) )
{
while ( list( $key, $value3 ) = each( $value2 ) )
{
array_push( $trackerlist, $value3->get_plain() );
}
}
} else {
array_push( $trackerlist, $value->get_plain() );
}
}
} …Run Code Online (Sandbox Code Playgroud) 这个问题继续从我昨天的问题中学到的,即使用git分发夜间版本.
在上述问题的答案中,很明显git不适合我的需要,并鼓励使用BitTorrent重新检查.
精简版
需要每天早上向70多人分发每晚构建,想使用git BitTorrent来平衡转移.
长版
NB.如果您已阅读我之前的问题,可以跳过以下段落.
每天早上我们都需要将我们的夜间版本分发给70多人(艺术家,测试人员,程序员,制作人员等)的工作室.到目前为止,我们已将构建复制到服务器并编写了一个同步程序来获取它(使用下面的Robocopy); 即使设置了镜像,传输速度也慢得令人无法接受,因为它需要长达一个小时或更长时间才能在高峰时间同步(非高峰时间大约为15分钟),这表明它们是硬件I/O瓶颈和可能的网络带宽.
到目前为止我所知道的
到目前为止我发现了什么:
我在维基百科上找到了关于BitTorrent协议的优秀条目,这是一个有趣的读物(我以前只知道种子如何工作的基础知识).在客户端 - 服务器握手之后,在BITFIELD交换机上也发现了这个StackOverflow应答.
我还找到了MonoTorrent C#Library(GitHub Source),我可以用它来编写我们自己的跟踪器和客户端.我们不能使用现成的跟踪器或客户端(例如uTorrent).
问题
在我的初始设计中,我让我们的构建系统创建一个.torrent文件并将其添加到跟踪器.我会使用我们现有的构建镜像来超级种子.
使用这种设计,我是否需要为每个新构建创建一个新的.torrent文件?换句话说,是否有可能创建一个"滚动" .torrent,如果构建的内容只有20%的变化,那么需要下载才能获得最新的内容?
......其实.在编写上述问题时,我认为我需要创建新文件,但是我可以下载到用户计算机上的相同位置,哈希将自动确定我已经拥有的内容.它是否正确?
回应评论
对于完全新鲜同步整个构建(包括:游戏,源代码,本地化数据,和光盘图像为PS3和X360)〜37000页的文件和在未来只是 50GB下.随着生产的继续,这将会增加.当只有2个其他同步发生时,这个同步需要29分钟才能完成,如果您认为在早上9点我们将有50多个想要获得最新的人,这个低峰值.
我们已经与IT部门调查了磁盘I/O和网络带宽; 结论是网络存储已经饱和.我们还将统计数据记录到同步数据库中,这些记录显示即使是少数用户,我们也会获得不可接受的传输速率.
如果不使用现成的客户端,在用户机器上安装uTorrent等应用程序是一个法律问题,因为可以使用该程序轻松下载其他项目.我们还希望有一个自定义工作流程来确定您想要获得哪个版本(例如,只有PS3或X360,具体取决于您桌面上的DEVKIT)以及可用的新版本的通知等.使用MonoTorrent创建客户端不是其中之一我很担心.
如何创建/构建/构建完全无跟踪的p2p(点对点)分布式网络架构?
如果我在不同的WAN中拥有静态IP地址和种子/对等体的种子/对等体.
我也找到了:
Torrent文件扩展名
无跟踪的torrent字典没有"announce"键.相反,无跟踪的torrent有一个"节点"键.此密钥应设置为torrent生成客户端路由表中的K个最近节点.或者,可以将密钥设置为已知的良好节点,例如由生成洪流的人操作的节点.请不要自动将"router.bittorrent.com"添加到torrent文件或自动将此节点添加到客户端路由表.
nodes = [["<host>", <port>], ["<host>", <port>], ...]
nodes = [["127.0.0.1", 6881], ["your.router.node", 4804]]
但是,我不知道我应该在哪里闪存(硬编码)这些IP地址
我已经阅读了有关此主题的许多文档,但是有些内容并不清楚。例如,比特种子文档(http://www.bittorrent.org/beps/bep_0005.html)指出
路由表被细分为“存储桶”,每个存储桶覆盖一部分空间。一个空表有一个存储桶,其ID空间范围为min = 0,max = 2 ^ 160。当将ID为“ N”的节点插入表中时,该节点将被放置在最小<= N <最大的存储桶中。空表只有一个存储桶,因此任何节点都必须位于其中。每个存储桶只能容纳K个节点(当前为8个),然后再变为“满”。当存储桶中充满了已知良好的节点时,除非我们自己的节点ID落入存储桶的范围内,否则无法再添加更多节点。在这种情况下,该存储桶将被两个新存储桶替换,每个新存储桶的范围均为旧存储桶的一半,并且旧存储桶中的节点将分布在两个新存储桶中。对于只有一个存储桶的新表,
关于kademlia路由表,它与其他文档有些不同,在kademlia路由表中,根据节点id的位前缀来排列存储桶,但还有另一件令人困惑的事情。当我们回复“查找节点”请求时,我们必须使用XOR操作找到8个最接近所请求节点的节点。我看到一些实现只是通过路由表中的每个项目执行XOR操作,从而找到8个最接近的项目。在我看来,CPU也在浪费。
一切都已经在桶中了。即使我们使用bit torrent文档系统建议的内容,我们也可以更快地找到可能包含所请求节点ID的存储桶,只需枚举存储桶并检查其上的最小和最大数目即可。然后,该存储桶可能应包含关闭节点,但它们是值最接近的节点,而不是异或最相似的XOR最接近的节点(据我所知)。
我使用0到99的数字进行了一个简单的测试,我想找到8个XOR最接近的数字,它们在所寻找的数字附近,但不在附近。现在,考虑一下我们的存储桶,我猜可能存储桶中的所有节点ID都是最接近的,仅是次要异常。因此,例如,如果我们拿这个存储桶,从左边取一个,从右边取一个,并搜索XOR最近的节点ID,我们将找到我们要寻找的东西,并且没有必要遍历路由中的所有节点表。
我是对的还是我错过了什么?
我正在阅读有关 Bittorrent 协议的内容,但在 Wiki 页面上找不到提到的内容。我可以理解跟踪者和发布者的作用,但从实际角度来看,我尝试联系跟踪者给我一些信息,它给了我以下信息:
7%00%00%04%82%91%F3%CA%D5%92%08%C8%7C%B0%AE%1E4%2B%E4C:0:1
Run Code Online (Sandbox Code Playgroud)
现在,开头的长字符串可能是信息哈希。作为下一步,我这样做了:
http://tracker.sometracker.com/announce?info_hash=7%00%00%04%82%91%F3%CA%D5%92%08%C8%7C%B0%AE%1E4%2B%E4C
Run Code Online (Sandbox Code Playgroud)
它给了我一个种子文件。到现在为止还挺好。Torrent 文件包含以下内容:
d8:completei0e10:downloadedi0e10:incompletei2e8:intervali1931e12:min intervali965e5:peers12:U????????^@^@e
Run Code Online (Sandbox Code Playgroud)
我去了这个网站:http://en.wikipedia.org/wiki/Torrent_file但找不到任何描述(或者可能错过了)。现在,如果我是客户端并且我得到了这个文件,我从哪里得到拥有该文件的 IP 地址列表?
我知道这是一个奇怪的问题,但我想知道是否有办法向我知道 IP 地址的 PC 发送短信。
例如,我正在通过 torrent 从网络上的 PC 下载文件。
通过 torrent 我可以知道这台电脑的 IP 地址,我想给拥有这台电脑的人发送一条短信。
这可能吗?
更新 #4:添加了演示 java 片段,用于使用 UDP 并发送公告消息(记住连接是第一个!)检查下面自己的响应。
=================================================== ==
更新#3:我设法让它工作,下面介绍的方法 doConnect() 是可以的,更多信息在我自己的回复中。
=================================================== ==
我主要感兴趣的是当公告 url 的协议是 UDP 时如何下载跟踪器响应。
详细信息:这些是来自有效 torrent 文件的一些公告网址(第一个是主要的)
http://tracker.torrentbox.com:2710/announce
udp://elbitz.net:80/announce.php?passkey=362fc69de3402e8ef5794c7ecf7c58d4
udp://tracker.podtropolis.com:2711/announce
Run Code Online (Sandbox Code Playgroud)
如果协议是 HTTP,一切都会顺利,这就是我的工作方式:
String fullUrl = announceURL + "?info_hash=" + this.m_TorrentInfoHashAsURL + .. // i add the params
URL url = new URL(fullUrl);
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
.. //reading the stream
Run Code Online (Sandbox Code Playgroud)
如果协议是 UDP,则 URL 构造函数会抛出“java.net.MalformedURLException:未知协议:udp”
所以我想问题可以恢复为以下内容:如何从 UDP 协议上的 URL 下载响应?(希望很简单并且我没有看到数据报的东西)
更新#1:
我在网上做了一些更多的调查并得出了下面粘贴的以下结构(应该可以工作..但不行,我的意思是在本地它可以,但不能使用真正的跟踪器)
规格链接:http://www.bittorrent.org/beps/bep_0015.html
例如:这就是我创建套接字的方式,但是在有效的跟踪器上我从未收到任何响应,因此有些东西不起作用:
if full url: udp://elbitz.net:80/announce.php?passkey=362fc69de3402e8ef5794c7ecf7c58d4
this.m_TrackerHost: elbitz.net
this.m_TrackerPort: 80 …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一个磁力链接(即magnet:?xt=urn:btih:640FE84C613C17F663551D218689A64E8AEBEABE)并为其获取元数据(标题、文件、评论,以及 .torrent 文件附带的任何其他内容)。理想情况下在python中,但我会获取任何可以获得的信息
bittorrent ×10
protocols ×2
python ×2
utorrent ×2
c# ×1
dht ×1
get ×1
html ×1
http ×1
ip-address ×1
java ×1
kademlia ×1
libtorrent ×1
magnet-uri ×1
p2p ×1
php ×1
request ×1
routing ×1
tracker ×1
transmission ×1
udp ×1