Задать вопрос
Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (12)

Лучшие ответы пользователя

Все ответы (2)
  • Как сделать handshake с пиром в сети BitTorrent?

    @Bleno Автор вопроса
    В строке 7 info_hash нужно закодировать в байты вот так:
    hashlib.sha1(torrent_file['info']).digest()

    А в своём коде я использовал метод hexdigest. Конечный код выглядит так:
    import hashlib
    import bencode
    import random
    import socket
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((peer_ip, peer_host))
    
    torrent_file = bencode.decode(open('test.torrent', 'rb').read())
    info_hash_raw = hashlib.sha1(bencode.bencode(torrent_file['info'])).digest()
    
    
    message = b'\x13BitTorrent protocol\x00\x00\x00\x00\x00\x10\x00\x05' + info_hash_raw + bytes(str(random.randint(10**20, 10**21-1)), encoding="UTF-8")
    
    sock.send(message)
    
    while True:
    	try:
    		resp = sock.recv(len(message))
    		print(resp)
    		break
    	except:
    		pass
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (15)