Задать вопрос
  • Как подключить домен пользователя к страницам сайта?

    @Bleno Автор вопроса
    Итак, решение (хоть и немного запоздавшее).

    В nginx добавляем примерно такой блок server:
    server {
                    listen 80;
                    server_name ~(^.*)$;#
    
                    location / {
                            proxy_pass http://localhost:8080/domain?domain=$http_host&after=$uri$is_args$args;
                           
                    }
            }


    В блоке location соответственно пишем адрес локального веб сервера, в данном примере так же передаётся сам домен и запрошенный url. Дальше веб сервер должен по домену определить необходимый субдомен (в примере page1) и сделать запрос на page1.example.com и вернуть ответ пользователю, или (что гораздо лучше) просто перенаправить запрос на обрабатывающую функцию (ну или сделать тот же http запрос на локальный адрес).

    Сам пользователь должен добавить к домену запись типа A на IP сервера (да, ip придётся раскрыть)
    Ответ написан
    Комментировать
  • Как сделать 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
    Ответ написан
    Комментировать