2017-07-09 2 views
3

Ich versuche, die Scrape-Methode für einen UDP-Tracker zu implementieren, aber ich bekomme immer 0 Sämaschinen/Leechers als Antwort. Ich bekomme immer noch eine 2 als Aktion, also wird kein Fehler gemeldet. Ich habe einen Hash hier hartcoded nur um zu zeigen, dass es keine Auswirkungen auf das Ergebnis hat, das ich bekomme.Keine Sämaschinen und Leechers zum Schaben von UDP-Tracker

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(); 

Ich habe verschiedene Tracker ausprobiert, aber die gleiche Antwort bekommen. Was könnte das Problem sein?

Edit: die Hex-Dump aller Anfragen und Antworten Hinzugefügt:

Connect Anfrage: Connect request

Connect Antwort: Connect response

Scrape Anfrage: Scrape request

Scrape Antwort : Scrape response

+0

Was genau senden und empfangen Sie auf dem Draht? Könnten Sie möglicherweise Wireshark verwenden und einen HEX + ASCII-Dump posten? – Encombe

+0

Ich sende ein DatagramPacket die Bytes oben. Ich bin mir nicht sicher, was Sie mit HEX + ASCII-Dumps meinen. Sollte ich die Übertragungen als normal erfassen? – Jesper

+0

Hinzugefügt zu meinem Beitrag. – Jesper

Antwort

2

In der Scrape-Anfrage;
die transaction_id = 0x36 wird als ein einzelnes Byte anstelle von 4 Bytes = 0x00000036
und die info_hash als 80 Byte String gesendet, die hex-codierte wurden, ist jedes Zeichen vorangestellt durch eine Null-Byte-0x00 statt als roher 20-Byte-String.
I.E. 0x0031004400310039... statt 0x1D19...

Die Scrape-Antwort hat keine Peers, da es keine Torrents mit den in der Anfrage gesendeten info_hashs gibt.

+0

Ich hatte dataStream.write statt dataStream.writeInt für die Transaktions-ID verpasst, so dass das behebt. Haben Sie Vorschläge, wie Sie den Hash in das richtige Format bringen können? – Jesper

+0

https://stackoverflow.com/questions/13990941/how-to-convert-hex-string-to-java-string oder https://stackoverflow.com/questions/32806404/convert-hexadecimal-to-string?! Ich mache kein Java. – Encombe

+0

Danke für die Antworten! Habe es mit dem apache commons hex zu tun, wenn ich die Zeichenfolge habe, aber ich frage mich immer noch, wie ich es mit einer Info hashmap machen soll. Vielleicht fange ich eine andere Frage an, wenn ich es nicht herausfinde ... – Jesper