В общем, долгое время пользовался классическим кодом для включения поддержки сокс, который приведен ниже. Однако, тут стал натыкаться на некоторые соксы, которые присылают неправильный ответ в самом конце, и в них бесполезно что-либо писать и считывать данные, ответ будет пустым. пример таких соксов: Code: 91.76.59.174:8363 95.72.95.179:8906 95.78.249.233:8608 Code: #!/usr/local/bin/perl use IO::Socket::Socks; my $proxy = new IO::Socket::Socks(ProxyAddr=>"91.76.59.174", ProxyPort=>8363, ConnectAddr=>"perl.org", ConnectPort=>80, AuthType=> 'none', Timeout => '20', SocksDebug => '1' ); if (!defined($proxy)) { die($SOCKS_ERROR); exit(1); } print $proxy "GET / HTTP/1.1\r\n". "Host: perl.org\r\n". "Connection: close\r\n\r\n"; my $databuf=''; $databuf .= $_ while <$proxy>; close $proxy; print $databuf; Дебаг подключения привожу ниже: Самый нижний столбик, поле Vers. Сокс вписывает туда некорректное значение.. по идее должен писать туда 0x05, но пишет почему-то 0x00. Кто нибудь сталкивался с такой проблемой? С таким соксом просто дальше работать невозможно, хотя через браузер все норм..
я как то пытался сделать потдержку соксов без модулей на сокетах чисто, и так у меня не чего и не вышло, потому что соксы возвращают что за хотят нифига не попротоколу). Как и в этом случае, версия 0 скорее всего значит, что сокс может рабоатать как по 4ой версии так и по 5ой.
Причина в самом IO::Socket::Socks, +отснифал еще. он шлет неполные пакеты ,на куски разрывает , изза этого и глюки с некоторыми socks-серверами. вообще, модуль уродский если честно, держит только 5 сокс. нашел ему альтернативу, держит socks 4/5: http://cpan.uwinnipeg.ca/dist/SOCKS , сейчас буду тестить
http://cpan.uwinnipeg.ca/dist/SOCKS этот модуль тоже уродско работает с соксами, такое же дробление данных наблюдается, многие socks-сервера откидывают такие запросы, так что выход - пишем код ручками.