我正在阅读有关 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 地址,我想给拥有这台电脑的人发送一条短信。
这可能吗?
我熟悉分布式哈希表 (DHT) 的工作原理。是否可以编写一个将数据存储到现有 DHT(例如 Kademlia 或 Mainline DHT)的程序?是否有一个简单的“Hello World”类型的程序可以显示最简单的方法来执行此操作?
我正在考虑将bittorrent用于大数据传播问题,其中数据源是千万亿次级,用户需要高达数TB的数据.一些细节
我预计活动种子的数量与可用总量相比较小,但服务质量很重要,因此每个种子必须有几个播种机或一些推出新播种机的机制.
我的问题是,bittorrent客户可以处理播种大量的种子,其中大部分都是空闲的吗?我是否需要在群集中的种子上划分种子,或者每个节点是否可以播种它可以访问的所有种子?哪个客户会做得最好?是否有任何工具来管理播种群?
我假设跟踪器可以扩展到这个级别.
当您使用BitTorrent下载文件时,可以从已经拥有该文件的其他人或从原始主机下载文件的一部分。下载完文件后,您也可以通过向其他人发送文件的一部分来帮助其他人下载文件。
即使对等方位于不向其转发任何传入连接的路由器后面,它们如何能够彼此连接?原始主机在某种程度上有帮助吗?
我试过这段代码:
import libtorrent as lt
import time
ses = lt.session()
ses.listen_on(6881, 6891)
info = lt.torrent_info('test.torrent')
h = ses.add_torrent({'ti': info, 'save_path': './'})
print 'starting', h.name()
while (not h.is_seed()):
s = h.status()
p = h.get_peer_info()
print lt.peer_info().ip
sys.stdout.flush()
time.sleep(15)
print h.name(), 'complete'
Run Code Online (Sandbox Code Playgroud)
它打印出这个:
starting test.avi
('0.0.0.0', 0)
('0.0.0.0', 0)
.
.
.
Run Code Online (Sandbox Code Playgroud)
因此,它没有给我一个同行列表,而是给了我零。我做错了什么吗?
更新 #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中,但我会获取任何可以获得的信息
我试图使用https://wiki.theory.org/BitTorrent_Tracker_Protocol从跟踪器获取同行列表
但网上提供的大多数torrent文件都使用了udp跟踪器.以上网站适用于HTTP跟踪器.使用基于HTTP的跟踪器的torrent文件会出错.(Passkey error , or hash error or user error or 404 not found response)
现在我的所有HTTP跟踪器的请求代码如下所示:
payload = urllib.urlencode(payload)
for ann in self.torrent.announce_list:
if("udp" not in ann[0]):
url = ann[0]
print "Encoded Request URL :",(url + "?" + payload)
print "Requesting Tracker for Peer List"
try:
response = urllib.urlopen(url + "?" + payload).read()
print "RESPONSE :",response
except Exception, e:
print e
Run Code Online (Sandbox Code Playgroud)
我已经根据uTorrent使用wireshark提出的请求交叉检查了我的请求URL.他们都匹配.正确生成信息哈希.
如何从UDP和HTTP跟踪器中检索对等列表?我试图不使用像lib-torrent这样的外部库.一些指导会非常有帮助.
每次向对等点请求特定文件时,每个对等点是否都成为 DHT 节点?还是节点独立于对等点存在?本质上,你如何成为一个节点?你可以是一个peer而不是一个节点吗?
如果问题太简单(这里是菜鸟),我很抱歉,但我无法在其他任何地方找到答案。我使用的术语与此处使用的相同。
bittorrent ×10
p2p ×3
python ×3
dht ×2
protocols ×2
bigdata ×1
get ×1
http ×1
ip-address ×1
java ×1
libtorrent ×1
magnet-uri ×1
udp ×1