В строке 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