BitTorrent同伴握手

时间:2013-08-23 03:08:20

标签: ruby networking tcp p2p bittorrent

我正在尝试向同伴发送BitTorrent握手,但它无法正常工作。有人能弄清楚我做错了什么吗? len应该带回来,但目前没有。

require 'bencode'
require 'digest/sha1'

file = File.open('./python.torrent').read
info_hash = Digest::SHA1.hexdigest(a['info'].bencode)

# Here's what parsed_response['peers'] returns:
# [{"ip"=>"8.19.35.234", "peer id"=>"-lt0C20-\x90\xE0\xE6\x0E\xD0\x8A\xE5\xA2\xF2b(!",          
# "port"=>9898}]
peer_id = parsed_response['peers'].first['peer id']

send_string = "\023BitTorrent protocol\0\0\0\0\0\0\0\0" << info_hash << peer_id

# ip and port are my current internet ip and 6881 respectively
client = TCPSocket.new ip, port

# What I'm sending over
client.send("\023BitTorrent protocol\0\0\0\0\0\0\0\0" << info_hash << peer_id, 0)
len = client.recv(1)
puts len

以下是send_string最终的样子: enter image description here

2 个答案:

答案 0 :(得分:1)

在你身边握手时, 使用的PeerID应该是您的,而不是另一方。

所以你的信息应该是这样的:

peer_id = "-MY0001-123456654321"
client.send("\023BitTorrent protocol\0\0\0\0\0\0\0\0" << info_hash << peer_id, 0)

如果您正在开发自己的bit-torrent客户端,那么您可以按照bit-torrent协议提到的标准拥有自己的peer id格式。 您可以在此处阅读有关peer id的更多信息: https://wiki.theory.org/BitTorrentSpecification#peer_id

如果您将来有任何疑惑,请启动任何bittorrent客户端并关注wire-shark数据包。你会明白,你犯错了。

我在这里附上一个示例握手消息: enter image description here

这里“-KS0001-123456654321”是我的bittorrent客户端的peerid。

答案 1 :(得分:0)

我不能写红宝石。 这是python代码:

send_string = chr(19)+"BitTorrent Protocol"+8*chr(0)+info_hash+peer_id