торрент-клиент: отправка сообщения рукопожатия пиру

Из списка одноранговых узлов я получаю TCP-соединение с одноранговым соединением, я пытаюсь отправить им сообщение о рукопожатии, но они, похоже, не отвечают.

Это мое сообщение в коде:

message = bytes(chr(19))+"BitTorrent protocol00000000"+self.getInfoHash(torrentCont)+self.peer_id

self.getInfoHash(torrentCont) — это необработанный хэш из торрент-файла.

это действительно то, что я отправляю:

BitTorrent protocol00000000ŒïƒœÝtDØ´öÙÄ×àŠD³T4F11T6ZGBQK2Y5LB8I4

любое предложение о том, что я делаю неправильно?


person help    schedule 09.12.2012    source источник


Ответы (1)


Вы путаете байты и символы. Спецификация говорит, что вы должны отправить восемь нулевых байтов, а не восемь раз больше символа «0» (что равно chr(48)):

message = (chr(19) +
           "BitTorrent protocol" +
           8 * chr(0) +               # <--- here
           self.getInfoHash(torrentCont) +
           self.peer_id)

# in case of doubt...
assert len(self.getInfoHash(torrentCont)) == 20
assert len(self.peer_id) == 20
person Armin Rigo    schedule 10.12.2012