Как сделать простой прокси на Python?Python

Программы на Python
Ответить
Anonymous
 Как сделать простой прокси на Python?

Сообщение Anonymous »

Я хотел сделать очень простой прокси, используя Python (в основном, чтобы понять, как он работает). Я говорю об общем TCP-прокси, а не только о http.
Я создал следующий код, однако, похоже, он работает только в одном направлении: т.е. запрос отправляется, но я никогда не получаю ответа. Вот код:

Код: Выделить всё

import socket
import argparse

#Args
parser = argparse.ArgumentParser(description='ProxyDescription')
parser.add_argument('-l', '--listen', action='store', help='Listening port', default=80, type=int)
parser.add_argument('destination', action='store', help='Destination host')
parser.add_argument('port', action='store', help='Destination port', type=int)
args = parser.parse_args()

#Server
s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s1.bind(('', args.listen))
s1.listen(1)
conn1, addr1 = s1.accept()

#Client
s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.connect((args.destination, args.port))
s2.setblocking(0)

print "Connected by ", addr1
while 1:
datato = conn1.recv(1024)
if not datato:
print "breaking to"
break
s2.send(datato)
print "data send : " + datato
try:
datafrom = s2.recv(1024)
print "reveived data : " + datafrom
if not datafrom:
print "breakinf from"
break
print "datafrom: " + datafrom
conn1.send(datafrom)
except socket.error, msg:
print "error rcving: " + str(socket.error) + " || " + str(msg)
continue
print "the end ... closing"
conn1.close()
s2.close()
Мой тест просто запускает этот скрипт и подключается через него через Telnet. Если я посмотрю с помощью Wireshark, я увижу, что сервер полностью понимает запрос, и я получаю ответ, однако я никогда не получаю ответа в телнете. (тестирование с помощью простого GET/в Google)
Я чувствую, что проблема связана с "блокирующим"/"неблокирующим" сокетом, но я не могу понять, где она находится.

Подробнее здесь: https://stackoverflow.com/questions/985 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»