передача данных с прокси по udp

В настройках прокси указываю ip своего приложения, браузер отправляет запрос прокси серверу. Прокси сервер получает запрос на получение страницы и отправляет его через udp на другой комп:

def send_udp_message(message, address, port):
    """send_udp_message sends a message to UDP server

    message should be a hexadecimal encoded string
    """
    message = message.replace(" ", "").replace("\n", "")
    server_address = (address, port)
    print("ok")
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        sock.sendto(binascii.unhexlify(message), server_address)
        while True:
         print("Ждем ответа")
         
         data, _ = sock.recvfrom(4096)
        
         ss = binascii.hexlify(data).decode("utf-8")
         if ss == "ffffff":
             break
         sss = ss[82:]
         print(ss)
         base = bytearray.fromhex(sss).decode()
        # break
        # global test
        # test = test+sss
         
    finally:
        sock.close()

    return binascii.hexlify(sss).decode("utf-8")


def handler(conn, tunn):
    while True:
        data = conn.recv(40960)
        print(data)
        if data:
            tunn.sendall(data)
        else:
            break


def handle(conn):
    request = conn.recv(40960)
    #print(request)
    s = request
    base64_url = base64.b64encode(s)
    url = "".join("{:02x}".format(ord(c)) for c in base64_url.decode("UTF-8"))
    print(url)
    message = "AA AA 01 00 00 01 00 00 00 00 00 00 " + url +" 00 00 01 00 01"
    print(message)
    response = send_udp_message(message, "127.0.0.1", 60)
    print(response)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1', 8085))
sock.listen(10)
while True:
    conn, addr = sock.accept()
    _thread.start_new_thread(handle, (conn,))

Далее, на другом ПК я получаю запрос, выполняю его и хочу вернуть содержимое запрашиваемой страницы страницы обратно браузеру:

def handler(conn):
    print("start")
    while True:
        data = conn.recv(40960)
        #print(data)
        if data:
        #    tunn.sendall(data)
            print(data)
        else:
            break

addr = (host, port)
udp_socket = socket(AF_INET, SOCK_DGRAM)
udp_socket.bind(addr)

while True:
 conn, addr = udp_socket.recvfrom(1024)

 url = str(conn)[50:][:-21] #выдернуть запрос
 message_bytes = base64.b64decode(url)
 request = message_bytes.decode('utf-8') # получили запрос 
 #вызвать функцию гет запроса
 r = request
 print(r)
 i = r.find(' ')+1
 j = r.find(' ', i)
 host, port = r[i : j].split(':')
 port = int(port)
 print(host)
 print(port)
 tunn = socket(AF_INET, SOCK_STREAM)
 tunn.connect((host, port))

 _thread.start_new_thread(handler, (tunn,))

все работает до print("start"), дальше приходит пустой ответ. Т.е переменная data = b''

Что я делаю не правильно, можно ли такое вообще организовать?


Ответы (0 шт):