PDA

Просмотр полной версии : [ perl ] perl+socks, трабл тут возник


Whirt
04.04.2009, 13:54
В общем, долгое время пользовался классическим кодом для включения поддержки сокс, который приведен ниже.
Однако, тут стал натыкаться на некоторые соксы, которые присылают неправильный ответ в самом конце, и в них бесполезно что-либо писать и считывать данные, ответ будет пустым.

пример таких соксов:


91.76.59.174:8363
95.72.95.179:8906
95.78.249.233:8608



#!/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;


Дебаг подключения привожу ниже:
http://s44.radikal.ru/i103/0904/85/b337fbbf67a4.gif

Самый нижний столбик, поле Vers. Сокс вписывает туда некорректное значение..
по идее должен писать туда 0x05, но пишет почему-то 0x00.

Кто нибудь сталкивался с такой проблемой? С таким соксом просто дальше работать невозможно, хотя через браузер все норм..

Vid0k
04.04.2009, 13:57
вопрос не в тему как получить такой дебаг запросов?

Whirt
04.04.2009, 13:59
Там дебаг включен
SocksDebug => '1'

zeppe1in
04.04.2009, 14:06
я как то пытался сделать потдержку соксов без модулей на сокетах чисто, и так у меня не чего и не вышло, потому что соксы возвращают что за хотят нифига не попротоколу). Как и в этом случае, версия 0 скорее всего значит, что сокс может рабоатать как по 4ой версии так и по 5ой.

Kaimi
04.04.2009, 16:25
по идее должен писать туда 0x05, но пишет почему-то 0x00.

Кто нибудь сталкивался с такой проблемой? С таким соксом просто дальше работать невозможно, хотя через браузер все норм..

Даже если туда 0х05 затолкать все равно работать не будет

Whirt
04.04.2009, 16:54
Причина в самом IO::Socket::Socks,
+отснифал еще.
http://s47.radikal.ru/i115/0904/87/5e712484f4bb.jpg

он шлет неполные пакеты ,на куски разрывает

, изза этого и глюки с некоторыми socks-серверами.


вообще, модуль уродский если честно, держит только 5 сокс.
нашел ему альтернативу, держит socks 4/5:

http://cpan.uwinnipeg.ca/dist/SOCKS
, сейчас буду тестить

Vid0k
04.04.2009, 16:55
чем можно в никсах пакеты снифать?

Whirt
04.04.2009, 16:59
Wireshark, например. Снифалось им как раз под никсами.

Whirt
12.04.2009, 23:40
http://cpan.uwinnipeg.ca/dist/SOCKS этот модуль тоже уродско работает с соксами, такое же дробление данных наблюдается, многие socks-сервера откидывают такие запросы,
так что выход - пишем код ручками.