Форум сайта python.su
вот -
http://dumpz.org/24130/
или
import socket
import select
import threading
# Input Thread TEMPORARY
class input_thread(threading.Thread):
def __init__(self,self_to_client):
self.self_to_client = self_to_client
threading.Thread.__init__(self)
def run(self):
while 1:
comtochar = raw_input ()
if comtochar == 's':
print "Send attack packet"
self.self_to_client.send("put packet here\n")
# Data
buff_len = 4096
data_to_serv = ''
data_to_client = ''
# Socket server
server_host = 'sock_serv_here.net'
server_port = 9775
self_to_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self_to_server.connect((server_host,server_port))
self_to_server.setblocking(0)
# PROXY
proxy_host = '127.0.0.1'
proxy_port = 20000
listening_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listening_sock.bind((proxy_host, proxy_port))
listening_sock.listen(1)
listening_sock.setblocking(0)
# Wait connection cycle
print 'Wait for connection'
while 1:
try:
self_to_client, addr = listening_sock.accept()
self_to_client.setblocking(0)
print 'Client connected'
break
except socket.error, (errcode, errmsg):
if errcode == 10035:
pass
else:
print "[%s] %s"
raise(socket.error)
print 'Listening socket closed'
listening_sock.close()
input_thread(self_to_client).start()
# Main Cycle
print 'Start tunnelling'
while 1:
try:
data_to_serv = self_to_client.recv(buff_len)
except socket.error, (errcode, errmsg):
if errcode == 10035:
pass
else:
raise(socket.error)
try:
if data_to_serv != '':
self_to_server.send(data_to_serv)
data_to_serv = ''
except socket.error, (errcode, errmsg):
if errcode == 10035:
pass
else:
raise(socket.error)
try:
data_to_client = self_to_server.recv(buff_len)
except socket.error, (errcode, errmsg):
if errcode == 10035:
pass
else:
raise(socket.error)
try:
if data_to_client != '':
self_to_client.send(data_to_client)
data_to_client = ''
except socket.error, (errcode, errmsg):
if errcode == 10035:
pass
else:
raise(socket.error)
self_to_client.close()
self_to_server.close()
Отредактировано (Ноя. 17, 2010 23:15:07)
Офлайн
Совсем неправильно.
Если у вас неблокирующие сокеты - код должен выглядеть совсем иначе.
Все завязывается на select.select (есть и другие альтернативы).
Главный цикл вызывает select.
По тому, что вернулось - читает, пишет, устанавливает соединения и т.д.
А потом опять select
Офлайн
спасибо попробую с select
Офлайн