RCS file: /home/cvs/CVS/Socks_chain/SC.pm,v Working file: SC.pm head: 1.22 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 22; selected revisions: 22 description: ---------------------------- revision 1.22 date: 2009-11-14 18:53:14 +0300; author: gosha; state: Exp; lines: +4 -4; commitid: u8K81smdPzEncvbu; minor changes ---------------------------- revision 1.21 date: 2009-11-14 13:18:40 +0300; author: gosha; state: Exp; lines: +6 -6; commitid: aIJfw1aGsrMvltbu; bug fixed: 23939 23938 ---------------------------- revision 1.20 date: 2006-10-19 23:13:35 +0400; author: gosha; state: Exp; lines: +24 -11; commitid: 75e34537ce544567; Поправил сообщения отладки ---------------------------- revision 1.19 date: 2006-10-19 22:36:45 +0400; author: gosha; state: Exp; lines: +304 -244; commitid: 6ff64537c5af4567; Добавил поддержку http проксей ---------------------------- revision 1.18 date: 2005-01-10 14:32:19 +0300; author: gosha; state: Exp; lines: +78 -69; Немного переписал работу с syslogd Добавил поддержку виндового eventlog ( тоесть при SYSLOG => 1, проверяем операционную систему и если вин то пользуем eventlog ) Поправил процедуру first_connect вернул взад использование IO::Socket Протестировал под win2000 - вроде работает... тоесть все вышеописанные исправления для этого... ---------------------------- revision 1.17 date: 2004-11-30 00:15:52 +0300; author: gosha; state: Exp; lines: +43 -25; Добавил параметр CHAIN_FILE_DATA в конструктор new ссылка на массив строк, если определено то данные читются не из файла конфигурации а из данного массива. Использовать для работы без `всяких` файлов конфигурации. ---------------------------- revision 1.16 date: 2004-09-24 12:20:06 +0400; author: gosha; state: Exp; lines: +42 -34; Поборолся с ворнингами. Теперь вроде поменьше стали ругаться при установленной $^W ---------------------------- revision 1.15 date: 2004-03-27 15:27:17 +0300; author: gosha; state: Exp; lines: +29 -20; Бага с залочкой и проверкой существования кешированных данных состояния сокс серверов. Определяли по наличию файла .sc.conf.db в более других версиях перла вместо .db пользуется .dir и .pag. Сейчас лочится конфигурационный файл. Процедура restore_cfg_data теперь вызывается незавимсимо от того есть файл с кештрованными данными или нет. Имя dbm файла для хранения кешированных данных состояния сокс серверов теперь ${конфигурационный файл}-cache. Связано с тем что опять же на некоторых перлах при создании dbm файла вообще ни каких расширений не добавляется - отсюда потеря конфига. ---------------------------- revision 1.14 date: 2003-12-14 12:39:55 +0300; author: gosha; state: Exp; lines: +85 -93; При ошибки открытии лог файла - данные об этой ошибке пропадали... Добавил возможность ведения лога черес syslog. В связи с эти пришлось добавить процедуру debug - пишет лог в секцию debug сислога, без DEBUG'а все пишется с приоритетом warning Вернул все варнинги назад - т.е. теперь об ошибках ругаемся не только при включенном $^W ---------------------------- revision 1.13 date: 2002-11-23 00:16:08 +0300; author: gosha; state: Exp; lines: +104 -86; Таймауты сделал на select'е вместо Alarm'а ---------------------------- revision 1.12 date: 2002-09-03 01:01:19 +0400; author: gosha; state: Exp; lines: +5 -8; Ну вобщем то ничего такого глобального, просто перенес инициализацию __peer_addr и __peer_port в create_chain для совместимости с версией модуля 1.10 ---------------------------- revision 1.11 date: 2002-09-02 21:02:53 +0400; author: gosha; state: Exp; lines: +932 -344; Не корректно строилась цепь с использованием протокола v4... В кеш ( .db ) теперь скидываются _все_ параметры сокс сервера... Поменял флаги для DEBUG, теперь: DEBUG - уровень отладки ( 0x00 | 0x01 | 0x02 | 0x04 | 0x08 ) 0x00 - выключить 0x01 - минимальный уровень ( connect и error'ы ) 0x02 - выводить все ответы от sokcs серверов 0x04 - выводить все, что пишем socks'ам 0x08 - расширенная информация об ошибках Все что писалось раньше в log_error ( кроме случаев с DEBUG ) теперь выводится только при включенном $^W Поправил путаницу с расчетом таймаутов CHECK_DELAY Добавил параметр LOOP_CONNECTION - проверка серверов на возможность коннектов. Появилось в свете багов с socks 4 которых много левых... Вобщем при включении данной опции после коннекта к данному серверу прежде чем строить цепь дальше второй раз коннектимся к этому же серверу но через существующую цепь... т.е. my ->1 ->2 ->3 ->1 ->2 ->3 короче проверяем а сокс ли там в принципе..., путем коннекта к самому себе... Это в большей степени относится к socks v4 Заменил процедуру bad_proxy на mark_proxy Теперь принимает два аргумента, первый так же как и раньше ID socks сервера в конфиге, второй аргумент - код возврата, если он равен SOCKS_OKAY то очищаем все неудачные попытки, иначе увеличиваем на единицу... Не очищался счетчик неудачных попыток при восстановлении связи... Текстовые сообщения о socks ошибках теперь хранятся в константе SOCKS_MSG Добавил процедуру sh - возвратить $self->{sock_h} Добавил процедуру close - закрыть соединение Конфигурационные параметры передающиеся в new и configure могут быть в любом регистре. При записи данных в порт теперь ловится SIGPIPE create_chain больше не принимает в качестве последнего аргумента ссылку на хеш... Написал процедуру socks_param Возвращает параметры сеанса работы последнего socks сервера Возможные параметры : listen_addr, listen_port, proxy_id, etc... при отсутствии $param возвращает ссылку на хеш со всеми имеющимися параметрами... Поменял явное использование хеша с ключами CFG_ на использование configure В конструктор добавил новый параметр AUTO_SAVE - автоматически сохранять данные в .db файле По умолчанию 0, Эта фича работает в connect и bind, Появился параметр RESTORE_TYPE при 0 - не удалять данные из .db файла если в новом конфиге они для данного хоста отсутствуют 1 - удалять. Раньше было всегда 0. connect и bind теперь можно вызывать и без предварительного read_chain_data(); Написал две новых процедуры connect и bind - просто обертки для create_chain, аргументы такие же только не нужен тип соединения... Процедура для соединения с первым сокс сервером теперь зовется first_connect accept теперь без параметра socks_obj Добавил немного комментариев в код... так на будующее... В качестве дескриптора LOG файла теперь используется не STDERR както не красиво закрывать его... Дескриптор LOG файла может быть напрямую передан в переменной LOG_FH, только при инициализации ( new ) LOG_FILE должно быть undef. ---------------------------- revision 1.10 date: 2002-08-19 15:40:58 +0400; author: gosha; state: Exp; lines: +4 -3; При проверке на наличие в системе alarm'а была очепятка проверялось не d_alarm а d_flock ---------------------------- revision 1.9 date: 2002-07-27 18:28:33 +0400; author: gosha; state: Exp; lines: +52 -23; Теперь проверяю $Config{d_flock} и $Config{d_alarm} перед использованием flock'а и alarm'а Убрал из new переопределение сигналов __DIE__ и __WARN__ ---------------------------- revision 1.8 date: 2002-06-25 20:30:39 +0400; author: gosha; state: Exp; lines: +6 -4; При создании цепочки теперь не зависимо от того есть DEBUG или нет в STDERR пишем 'Connect to Socks....' В dump_cfg_data некорректно отрабатывался сброс данных в файл. Т.е. если запись с таким ключем уже уже существовала то ни чего не изменялось... ---------------------------- revision 1.7 date: 2002-06-17 21:55:23 +0400; author: gosha; state: Exp; lines: +3 -3; При разборе конфига некорректно парсилась информация о версии socks протокола. Т.е. всегда возвращаласть версия N 5.... ---------------------------- revision 1.6 date: 2002-06-05 21:55:19 +0400; author: gosha; state: Exp; lines: +125 -52; По умолчанию конфиг теперь лежит в $ENV{HOME}/.sc.conf Добавил методы dump_cfg_data и restore_cfg_data Добавил метод bad_proxy - помечать прокси которые не надо пользовать принимает на входе id прокси в конфигу. create_chain в ссылке на хеш теперь возвращает еще и ID прокси в proxy_id Ошибка в расчете доступных проксей в create_chain Ошибка в подсчете проксей в get_socks_count ---------------------------- revision 1.5 date: 2002-06-04 03:02:39 +0400; author: gosha; state: Exp; lines: +60 -50; Заточил под цивильный модуль... timeout поменял на configure - для изменения любых параметров инициализированных в new(); Несколько подправил код, чтоб меньше ругалость на -w $socks_obj->{listen_addr} - теперь содержит IP в формате xxx.xxx.xxx.xxx ---------------------------- revision 1.4 date: 2002-05-31 21:55:17 +0400; author: gosha; state: Exp; lines: +48 -15; В конфиге может не описываться номер протокола - по умолчанию пользуется 5. Добавил процедуру accept Добавил процедуру timeout - читает/изменяет текущий таймаут. В create_socks_chain() теперь два новых аргумента: третий (4) по номеру - тип запроса; 1 - connect 2 - bind четвертый (5) по номеру - ссылка на хеш в который запишутся параметры последнего коннекта в цепочке. ---------------------------- revision 1.3 date: 2002-05-27 18:43:11 +0400; author: gosha; state: Exp; lines: +54 -49; В create_chain - цепочка строится пока не достигнет нужной длинны или в списке не кончутся доступные серверы. Время задержки CFG_CHECK_DELAY с каждой неудачной попыткой увеличивается на 100 %, те все движется для использования в серверной части... ---------------------------- revision 1.2 date: 2002-05-24 02:53:37 +0400; author: gosha; state: Exp; lines: +63 -37; Протестировал все с реальным socks'ом Добавил новую функцию get_chains_count - возвращает количество socks серверов, которые считаюся доступными на данный момент Из параметров CFG_ убрал RULE - за ненадобностью. Сделал проверку: если CFG_LOG_FILE не undef то открывается лог файл, иначе все ошибки пишутся в STDERR Функция socks_error - теперь если не может определить строковое представление ошибки возвращает ее номер. connect - теперь тоже с timeout'ом read_data - при таймауте возвращает 0, при закрытие сокета -1 create_chain - в начале делает undef $self->{sock_h} - сделано для возможности организации цикла с перебором всех возможных proxy... Если число доступных в данный момент socks серверов меньше CHAIN_LEN - то даже не пытаемся законектится к доступным в данный момент серверам. socks5_auth - даже при пустых user_id и user_pswd пытались передать пароль, в результате чего все отваливалось по AUTH_FAILED... ---------------------------- revision 1.1 date: 2002-04-27 19:51:59 +0400; author: gosha; state: Exp; Всю работу по построению цепочек вытаскиваю в отдельный модуль, далее для каждого сервиса надо писать клиента ( http, ftp, telnet, etc...) =============================================================================