从udp跟踪器中获取没有播种器和leechers

时间:2017-07-09 14:47:14

标签: java udp bittorrent

我正在尝试为UDP跟踪器实现scrape方法,但我不断将0个seeder / leechers作为响应。我仍然得到一个2作为动作所以没有报告错误。 我在这里硬编码哈希只是为了表明它对我得到的结果没有影响。

    final ByteArrayOutputStream byteStream =new ByteArrayOutputStream();
    final DataOutputStream dataStream =new DataOutputStream(byteStream);
    dataStream.writeInt(connectResponse.get("connectionId0"));
    dataStream.writeInt(connectResponse.get("connectionId1"));
    dataStream.writeInt(2);
    dataStream.write(connectResponse.get("transactionId"));
    bencodeWriter.write(byteOut.toString());
    dataStream.writeChars("1D19CC96C1A4965D184E4B215942DBC0A09FF8F2");
    dataStream.close();
    final byte[] scrapeBytes= byteStream.toByteArray();

我尝试了不同的跟踪器,但得到了相同的响应。可能是什么问题?

编辑:添加了所有请求和响应的十六进制转储:

连接请求: Connect request

连接响应: Connect response

Scrape请求: Scrape request

Scrape Response: Scrape response

1 个答案:

答案 0 :(得分:2)

在Scrape请求中;
transaction_id = 0x36作为单个字节而不是4个字节= 0x00000036发送 并且info_hash作为一个80字节的字符串发送,该字符串是十六进制编码的,每个字符前面都有一个零字节0x00,而不是原始的20字节字符串。
I.E. 0x0031004400310039...代替0x1D19...

Scrape响应没有对等体,因为在请求中没有发送info_hashes的种子。