2016-12-06 13 views
1

ビットトレントプロトコルに問題があります。私はいくつかの同僚に握手メッセージを送る時点にいる。私はクライアントを基本的にリストのすべてのピアに接続してから、「ハンドシェイク」を送信します。コードは以下です -ビットトレントピアハンドシェイクからデータを受信して​​いません

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') 

私が送信している変数があります。私のmsgがある -

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

print(lenmsg) 
print(len(lenmsg)) 

出している - -

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 

ビットトレントの仕様に基づいて

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

私のメッセージは、49 + LEN(PSTR)の適切なLENですメッセージ全体がこのように見える -

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' 

私の主な問題は、データが返ってこないということです。私はsocket.settimeout(4)を持っていて、それはただタイムアウトになりますか?

答えて

1

出力が正しくない、「BitTorrentプロトコル」が欠落しています。
適切なハンドシェイク文字列は68バイトです。

それは次のようになります。私はそれは私が信じていないタイプミスだっ持っ

\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

わかりました。メッセージが正しければ、私はピアから戻ってきたハンドシェークをなぜrecvしていないのかを調べ始めることができます。私はasyncoreを理解していない可能性がありますか? –

+1

コードを見ずに伝えるのは難しいです。 wireSharkを使用して、動作中のクライアントと比較しようとするかもしれません。 – Encombe

関連する問題