передача данных с прокси по 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''
Что я делаю не правильно, можно ли такое вообще организовать?