2016-12-06 3 views
1

Ich habe Probleme mit dem Bit-Torrent-Protokoll. Ich bin gerade dabei, eine Handshake-Nachricht an einige Kollegen zu senden. Ich habe meinen Client im Grunde mit jedem Peer in der Liste verbinden und dann den 'Handshake' senden. Code ist unten -Keine Daten vom BitTorrent-Peer-Handshake empfangen

peer_id = 'autobahnbit' 
peer_id = peer_id.encode('utf-8') 
pstr = 'BitTorrent protocol' 
pstr = pstr.encode('utf-8') 
pstrlen = chr(19) 
pstrlen = pstrlen.encode('utf-8') 
reserved = chr(0) * 8 
reserved = reserved.encode('utf-8') 

Da meine Variablen, die ich sende. Mein msg ist -

msg = (pstrlen + pstr + reserved + new.torrent_hash() + peer_id) 

Basierend auf der Bit-Torrent-Spezifikation meiner Botschaft ist die geeigneten len von 49 + len (pstr) -

lenmsg = (pstrlen + reserved + new.torrent_hash() + peer_id) 

print(lenmsg) 
print(len(lenmsg)) 

wird außer Betrieb gesetzt -

b'\x13\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahnbit' 
49 

die gesamte Nachricht sieht so aus -

b'\x13\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahnbit' 

Mein Hauptproblem ist, dass ich keine Daten zurückbekomme. Ich habe die socket.settimeout(4) und es wird nur Timeout?

Antwort

1

Die Ausgabe ist falsch, es fehlt das BitTorrent-Protokoll.
Eine richtige Handshake-Zeichenfolge ist 68 Byte lang.

Es sollte sein:

\x13BitTorrent protocol\x00\x00\x00\x00\x00\x00\x00\x00\x94z\xb0\x12\xbd\x1b\xf1\x1fO\x1d)\xf8\xfa\x1e\xabs\xa8_\xe7\x93autobahnbit 
+0

Okay, ich habe, dass ein Tippfehler war, glaube ich. Wenn die Nachricht korrekt ist, kann ich anfangen zu suchen, warum ich keinen Handshake vom Peer zurück bekomme. Es könnte sein, dass ich Asyncore nicht verstehe? –

+1

Schwer zu sagen, ohne auf den Code zu schauen. Vielleicht versuchen Sie, WireShark zu verwenden und mit einem funktionierenden Client zu vergleichen. – Encombe

Verwandte Themen