Найти - Пользователи
Полная версия: Обмен данными через прокси
Начало » Python для новичков » Обмен данными через прокси
1 2
EgorTrepov
Написал такую штуку:
Сервер
import socket
HOST = socket.gethostname()
PORT = 8254
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT))
client.sendall('GET / HTTP/1.1\nHost: precise64\nAuthorization:Basic enViaXp1OnB5dGhvbg==\n\n')
data = client.recv(1024)
client.close()
print 'Received', repr(data)
Клиент
import socks
s=socks.socksocket()
s.setproxy(socks.PROXY_TYPE_SOCKS5,'localhost',8192)
s.connect(('localhost',1080))

s.send('hello world')

data=''
buf=s.recv(1024)
while len(buf):
data+=buf
buf=s.recv(1024)
s.close()

print(data)
Прокси запустил Proxomitron.
Выдает такую ошибку:
Traceback (most recent call last):
File "C:/Users/egort_000/Desktop/Задание/Client.py", line 4, in <module>
s.connect(('localhost',1080))
File "C:\Python27\lib\site-packages\socks.py", line 364, in connect
self.__negotiatesocks5(destpair[0], destpair[1])
File "C:\Python27\lib\site-packages\socks.py", line 174, in __negotiatesocks5
chosenauth = self.__recvall(2)
File "C:\Python27\lib\site-packages\socks.py", line 135, in __recvall
if not d: raise GeneralProxyError((0, "connection closed unexpectedly"))
GeneralProxyError: (0, 'connection closed unexpectedly')
Когда выключаю прокси выдает:
Traceback (most recent call last):
File "C:\Users\egort_000\Desktop\Задание\Client.py", line 4, in <module>
s.connect(('localhost',1080))
File "C:\Python27\lib\site-packages\socks.py", line 363, in connect
_orgsocket.connect(self, (self.__proxy[1], portnum))
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 10061] Подключение не установлено,
В чем причина?
EgorTrepov
Короче думаю проще задание прислать, может тогда вы меня поймете:

Написать на языке питон ПО для тестирования прокси сервера.
Возможно повторное использование кода и\или сторонних библиотек.

Тип программы:клиент-сервер
Протокол прокси: SOCKSv5
Методы авторизации:без авторизации, логин\пароль
Тип соединения:IPv4/TCP(CONNECT/BIND), FQDN/TCP(CONNECT/BIND)
Среда исполнения:Windows, Linux
Тип CVS:Mercurial
Версия Python: 2.7

Схема работы:
Клиент создает N кол-во соединений через прокси, случайным образом выбирая тип соединения. Далее происходит постоянный обмен данными между сервером и клиентом, т.е. клиент шлет данные серверу, сервер отвечает тем, что олучил от клиента и далее по этому циклу.

Требования(клиент):

Параметры командной строки:
fqdn=examle.com -дает возможность указать какое доменное имя использовать для подключения
–proxy=127.0.0.1:1080 -IP и порт прокси сервера, по умолчанию 127.0.0.1:1080
–server=127.0.0.1:59000 -IP и порт сервера, по умолчанию 127.0.0.1:59000
–tasks=200 -дает возможность указать кол-во соединений, которое требуется открыть, 200 по умолчанию
–buf=1024 -дает возможность указать размер буфера для пересылки данных, 1024 по умолчанию
–cred=user@pass,user@pass -если указан, то задает им пользователя и пароль для авторизации(может быть несколько)
–bf=4 -если указан, то клиент должен случайным образом выбрать имя пользователя и пароль и пытаться авторизоваться на сервере. Значение параметра это кол-во соединений, которое будет использоваться для режима –bf.

Клиент должен заполнять буфер пересылки целиком, т.е. недопустимо пересылать неполный буфер.
Клиент посылает следующий буфер после получения предыдущего с сервера.
Данные должны постоянно изменяться, но могут быть любыми, random, счетчик и\или что-то другое.
При FQDN соединении клиент случайным образом генерирует строку и в последующем использует ее как домен 3го уровня для установки соединения, на основе параметра –fqdn
Каждое соединение обслуживается параллельно.
Длинна домена третьего уровня для FQDN соединений - 5 знаков, пример qwert.examle.com
Клиент должен иметь CLI интерфейс на потоках stdin\stdout, и поддерживать следующие команды:
start - запустить тест
stop - остановить тест
stat - показать статистику
exit - выйти из программы

Статистика должна содержать:
кол-во установленных соединений
объем данных переданных по каждому из соединений
кол-во ошибок(сервер отвалился, не принял новое соединение, и т.п.)
при включенном –bf кол-во удачных\неудачных попыток авторизации
доп информация на свое усмотрение

Клиент должен выводить в поток stderr ошибки соединения, авторизации и т.п.

Требования(сервер)

Параметры командной строки:
–port=59000 -адрес на котором сервер должен ожидать клиента по умолчанию 59000
–buf=1024 -дает возможность указать размер буфера для пересылки данных, по умолчанию 1024
–cred=user@pass,user@pass -если указан, то задает имя пользователя и пароль для авторизации(может быть несколько)

Сервер должен заполнять буфер пересылки целиком, т.е. недопустимо пересылать неполный буфер.
Сервер должен выводить в поток stderr ошибки соединения, авторизации, и т.п.
после запуска на потоке stdin сервер ожидает нажатия клавиши Esc, при нажатии сервер завершает работу.
В поток stdout сервер выдает информацию о новых подключениях, с указанием IP адреса клиента.
Budulianin
$200 - $300
EgorTrepov
А почему тот код что я скинул не работает, можете сказать?
Budulianin
EgorTrepov
А почему тот код что я скинул не работает, можете сказать?

Выздоравливай
Budulianin
EgorTrepov
Когда выключаю прокси выдает:
EgorTrepov
error: Подключение не установлено,
Подумай над этим. Он тебе не врёт.
С чем устанавливать соединение, если ты отключил прокси?
Порт никто не прослушивает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB