Я пытаюсь сделать сокет прокси, откуда я буду знать длину пакетов ? Ведь через него может работать куча программ и у каждой свой протокол. Мне надо чтобы я мог приконектиться к скрипту любой программой, а скрипт реализовал бы приемо-отдачу трафика с сервером указанным в скрипте, вообщем прокси сервер простенький.
Спасибо что дали мне время подумать и решить свою проблему самому. Извеняюсь за тот бредовый код который я написал выше, что то я завтыкал и написал такой бред. Все исправил все заработало.
import socket
import threading
# Any socket server
server_host = 233.11.27.13
server_port = 9775
# PROXY
proxy_host = '127.0.0.1'
proxy_port = 20000
class server_thread(threading.Thread):
def __init__(self, server_sock, client_sock):
self.server_sock = server_sock
self.client_sock = client_sock
threading.Thread.__init__(self)
def run (self):
while 1:
try:
data = ''
data = self.server_sock.recv(8192)
if data != '':
print "FROM SERVER : "+str(data)+"\n"
print "RECEIVED FROM SERVER : "+str(self.client_sock.send(data))
except:
print "Connection with server is lose"
break
self.sock.close()
class client_thread(threading.Thread):
def __init__(self, server_sock, client_sock):
self.server_sock = server_sock
self.client_sock = client_sock
threading.Thread.__init__(self)
def run (self):
while 1:
try:
data = ''
data = self.client_sock.recv(8192)
if data != '':
print "TO SERVER : "+str(data)+"\n"
print "SENDED TO SERVER : "+str(self.server_sock.send(data))
except:
print "Connection with client is lose"
break
self.sock.close()
sock_rec = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock_rec.bind((proxy_host, proxy_port))
sock_rec.listen(5)
conn, addr = sock_rec.accept()
print 'Connected by', addr
sock_serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock_serv.connect((server_host,server_port))
print "Connected to server"
server_thread(sock_serv,conn).start()
client_thread(sock_serv,conn).start()
Есть еще один вопрос у меня, возможно ли сделать на питоне, на блокирующих сокетах так : в коде который представлен выше я добавляю еще один поток, из него я хочу слать пакеты когда хочу, но у меня возникает ошибка изза того что сокеты находятся в режиме ресива и заблокированны. Как разобраться с данной ситуацией ? (желательно без асинхронных сокетов итемболее неблокируемых)