Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2010 23:06:54

hzkto1
От:
Зарегистрирован: 2010-11-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по сокетам

вот -
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)

Офлайн

#2 Ноя. 18, 2010 00:07:41

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопросы по сокетам

Совсем неправильно.
Если у вас неблокирующие сокеты - код должен выглядеть совсем иначе.

Все завязывается на select.select (есть и другие альтернативы).
Главный цикл вызывает select.
По тому, что вернулось - читает, пишет, устанавливает соединения и т.д.
А потом опять select



Офлайн

#3 Ноя. 18, 2010 00:17:00

hzkto1
От:
Зарегистрирован: 2010-11-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопросы по сокетам

спасибо попробую с select



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version