lerne ich vor kurzem Bit-Torrent-Protokoll, und ich habe mein Skript erfolgreich von Gleichaltrigen durch DHT-Protokoll sind abhängig von Dokument bep_0005 Adresse erhalten Tonne gemacht:Wie kann ich mit Kollegen aus dem DHT-Netzwerk kommunizieren?
http://www.bittorrent.org/beps/bep_0005.html
Wenn der abgefragte Knoten Peers für die hat InfoShash, sie werden in einem Schlüssel "Werte" als eine Liste von Zeichenfolgen zurückgegeben. Jede Zeichenfolge enthält "compact" Format Peer-Informationen für einen einzelnen Peer.
Also dekodiere ich diese "Werte" zu IP/Port.
Ich versuchte Verbindung mit ihnen über TCP-Socket, Timeout, Netzwerk ist nicht erreichbar, Verbindung verweigert Fehler ausgelöst.
Ich versuchte send-Handshake-Nachricht abhängig von bep_0029 über UDP-Socket, aber keiner von ihnen antwortete.
Jeder kann mir sagen, ist etwas falsch? Was ist der richtige Weg, um diese Peers zu verbinden? oder Ist das normal 99% von ihnen sind nicht in der Lage zu verbinden, ich habe nur nicht diese 1% gute Kollegen?
Vielen Dank!
Dies ist TCP Antwort von Peers, dass ich von Tracker bekam
Aber kein Glück von DHT.
# This is function I decode ip/port
def decode_peers(peers):
ret = []
for ipport in peers:
try:
ret.append((socket.inet_ntoa(ipport[:4]), unpack('>H', ipport[-2:])[0]))
except Exception as err:
logging.critical(err)
return ret
# This is an bdecoded example what I received from nodes, and I passed "value" part to the upon function.
[03:53:05](DEBUG): OrderedDict([(b'ip', b'n\xbc;,\xf1\x87'), (b'r', OrderedDict([(b'id', b'\xcf\[email protected]\xfb\x86?\x17\xb0\x95\xd1\xb9:\x9a\xf1\x9c\xf1v\x03\xa82'), (b'nodes', b'\x85\xd7\x80\x1b\x8a"V\xd9>\xf8<\xa2\x0e2~\x84j\x94wIA\xb2\x19&\x8b\x0c\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde0\x05\xb2\xce\xe2\x0b8j\xd1\xd3.\x85\x8cH\x8c\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde0\x06\x8d\x81\x1f\xe4\xc5\x88\xec\xad\xfc\x1a\xcf\x9e\xa6\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde0\x07 \xbcR\x1d*u\x0e.\xa8E\x12G\xdb\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde1\x80r\xfdn\x8d!\r\x17\xbfU\xb5\x87\x81t\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde1\x81\x90\xc0\x13Pw\x91\x87\xc25\x9d1\x881\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde1\x82m"\x12-\x96\xc7\x1fY}\xe4_\x9f\xff\xcf\[email protected]\xfb\x86?\x18\x93$\xdf\xde1\x83\x82\xdb\xf0\x10\xeb&I\xc5}\xece\x13\xc9'), (b'token', b'\na\xb8\x15'), (b'values', [b'9Bq\xf1X\xea', b'9\x07r7\x9a\xee', b'\x7fg\xb8\x17\x9e\x90', b'\xc1d\xfa\xa5\x01\x94', b'\x04r=!C\x9a', b'Fv\x7f\xa7\x86\x9e', b'\x89s\x7f\xf3\xc8\xa4'])])), (b't', b'\xc3\x8b\xc2\x9d'), (b'v', b'LT\x00\x11'), (b'y', b'r')])
# This is result I got from decode function, there is no difference when I compare to what Wireshark decode under DHT protocol.
[04:03:56](DEBUG): [('57.66.113.241', 22762), ('57.7.114.55', 39662), ('127.103.184.23', 40592), ('193.100.250.165', 404), ('4.114.61.33', 17306), ('70.118.127.167', 34462), ('137.115.127.243', 51364)]
Post einige Paketerfassung + was Sie dekodiert. und Sie möchten vielleicht einen beliebten Torrent testen. und vergleichen Sie mit einer vorhandenen Implementierung, um zu sehen, ob das funktioniert – the8472
Haben Sie Ihre TCP-Peer-Protokoll-Implementierung mit Nicht-DHT-Peers bereits verifiziert? Ich habe kürzlich Bits einer neuen BitTorrent-Implementierung getestet, und ich fand es viel einfacher, wenn ich einen Client lokal auf einem bekannten Port ausführte, bevor ich versuchte, mich mit Peers im Internet zu verbinden. (In meinem Fall benutze ich ein Docker-Bild ([basierend darauf] (https://github.com/camillebaronnet/docktorrent)), so dass ich den Status meines Test-Peers leicht teilen und zurücksetzen kann.) –
Danke, antwortete mir Ich habe bereits den Screenshot der Paketerfassung von Wireshark hochgeladen. Sie können sehen, dass meine TCP-Implementierung möglicherweise korrekt funktioniert.Aber ich kann immer noch keine Antwort von Kollegen in DHT bekommen, alle von ihnen können nur nicht Verbindung hergestellt werden, das ist frustriert –