Короче думаю проще задание прислать, может тогда вы меня поймете:
Написать на языке питон ПО для тестирования прокси сервера.
Возможно повторное использование кода и\или сторонних библиотек.
Тип программы:клиент-сервер
Протокол прокси: 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 адреса клиента.