[bittorrent] 从http tracker 获取peers

知道了 torrent 文件和格式,便可以利用它的 tracker 地址得到其它客户端来下载文件,查看 meta['announce']的内容,是一个 形如 http://tracker.cnxp.com:8080/announce 的地址,我们便可以向它请求来获得peers.

请求包括以下几个字段:

  • info_hash 为 torrent 文件中 info 部分进行 encode 后的hashcode, 长度为20字节, 即 sha.new(bencode(info)).digest()
  • peer_id 自已的客户端产生的20个字节的随机值
  • ip 自己的IP
  • port 自己监听的端口
  • uploaded 为上传的流量
  • downloaded 为下载的流量
  • left 为未获取文件的大小
  • compact 是否是用紧凑模式, 当为 1 时, 返回的peers 为6的整数倍, 并且没有对方的peerid

知道了这些, 我们就可以发送请求来获取peers 了, 发送格式为 http://tracker.com/?info_hash=xxx&peer_id=xxx ...., 由于数据并非全是ascII字符,所以需要使用 urllib.urlencode 转义, 当 compat 为0时,

返回的数据同样是使用 bencode 编码的, 解码后为一个字典,包括peers, interval 字段, peers 为一个列表,每一项为一个字典,包括

  • ip
  • port
  • peer_id

interval 为查询要间隔的时间

当 compat 为1时, peers 为一个字段串, 每6个字节代表一个peer,前四个字节为ip(网络字节),后两个为port(网络字节)

这样我们就得到了其它使用bt的客户

blog.csdn : bittorrent, python, tracker, 脚本

Bittorrent协议的Tracker连接问题 熟悉BT和HTTP的请进

01-15

我在尝试写一个小的基于Tracker的BT下载客户端,在构造并发送对Tracker服务器的Http请求后,在接收处recv时,发生了WSAECONNABORTED错误。我用的阻塞socket,大概代码如下:rn连接部分:rn[code=c]int r = connect(m_socket, (sockaddr*)&m_trackAddr, sizeof(sockaddr));[/code]rn以下是我构造的请求报文(基于CF官网下在的某个版本的crossfire.torrent):rnGET /announce?info_hash=%D9%0D%A4D%9A%FE%25t%B907%F2%0BK%7BY%B7%BAmk&peer_id=-CD0303-)%23%BE%84%E1l%D6%AER%90I%F1&port=6969&event=started&uploaded=0&downloaded=0&left=1625844328&compact=1&numwant=20 HTTP/1.0\r\nUser-Agent: Bittorrentrn发送请求:rn[code=c]rnsendlen = send(m_socket, reqBuf, len, 0);rnif(sendlen < len) return -1;rn[/code]rn然后在接收处遇到错误,通过WSAGetLastError得到错误码为WSAECONNABORTEDrn[code=c]int r = recv(m_socket, m_szRespones, 1000, 0);[/code]rn我是在连接成功后马上发送请求的,现在怀疑是自己的请求报文构造有问题,导致服务器主动关闭连接。可是如果请求的路径不合法,应该返回404 Not Find,比如我用GET /announce/index HTTP/1.0\r\nHost: 183.62.124.178\r\nUser-Agent: Bittorrent 就会返回404。rn现在我想问的问题是:rn 1.什么原因导致的WSAECONNABORTED?rn 2.有没什么工具可以得到.torrent文件的infohash?这样以便于我验证自己算出的infohash是否正确。rn 3.对Tracker的HTTP请求可以用Fiddler之类的工具直接模拟构造进行测试吗?我用Fiddler构造老是得到502rn 最后谢谢大家的耐心,求带额。[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif][/img] 论坛

没有更多推荐了,返回首页