Перенаправитель запросов сокетов Python из firefox на веб-сервер

#python #sockets #proxy

Вопрос:

Я новичок в python и пытаюсь написать прокси-сервер для пересылки запросов, сделанных из браузера firefox, на соответствующий веб-сервер. После выполнения приведенного ниже кода я получаю [Errno -2] Имя или неизвестную службу. Я не знаю, что я делаю не так. Кроме того, я хочу иметь возможность управлять прокси-сервером в двух режимах:

  1. Прямое перенаправление трафика и,
  2. Иметь возможность разделять запросы с использованием http-диапазона (как этого можно достичь?). Заранее спасибо.
 import socket, sys from _thread import *  # FORWARDER TO HOST ADDRESS FROM BROWSER REQUEST def begin():  try:  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  s.bind(('127.0.0.1', 2555))  s.listen(5)  except socket.error as e:  print (e)   while True:  try:  conn, addr = s.accept()  data = conn.recv(1024)  start_new_thread(conn_data (conn, data, addr))  except KeyboardInterrupt:  s.close  sys.exit()  s.close()  # Get host address and assign port 80 as default to the webserver def conn_data(conn, data, addr):  try:  d = data.split(b'n')[0]  url = d.split(b' ')[1]  url = url.decode()  host = url.split(':')[0]   ip = socket.gethostbyname(str(host))  webserver = ip   ':'  http_port = 80   forwarder(webserver, http_port, conn, addr, data)   except socket.gaierror:  print ("n[*] Error resolving the host...n")  sys.exit()    except KeyboardInterrupt:  print("n[*] User terminated connectionn")  conn.close  sys.exit()  def forwarder(webserver, http_port, conn, data, addr):  try:  # Connecting to the host  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  s.connect((webserver, http_port))  s.send(data)   while True:  server_res = s.recv(1024)  if (len(server_res) gt; 0):  conn.send(server_res)  else:  break  s.close()  conn.close    except socket.error as e:  print (e)  s.close()  conn.close()  sys.exit()  

Комментарии:

1. Код неполон, т. е. не может быть использован для воспроизведения проблемы. Также неизвестно, как вы получаете доступ к прокси-серверу от клиента, т. е. как вы настраиваете его в клиенте. Кроме того, у вас, похоже, неправильные ожидания относительно того, как выглядит HTTP — запрос или что является подходящим аргументом для gethostbyname-я рекомендую распечатать то, что у вас есть, host и сверить с тем, что там должно быть. Кроме того, объем вашего вопроса слишком широк, пожалуйста, остановитесь на одной проблеме.