Пытаюсь написать чекера socks, но что-то не очень получается. При использовании библиотеки starksoft подключение к некоторым прокси занимает 10мин, изменить таймаут не имею возможности так как зависание происходит в методе CreateConnection этой библиотеки. Код для starksoft: Code: public SocksType Check5(string host, int port) { try { Socks5ProxyClient sc = new Socks5ProxyClient(host, port); TcpClient tc = sc.CreateConnection("kinoland.com.ua", 47472); tc.ReceiveTimeout = 15000; tc.SendTimeout = 15000; string message = "GET /azenv.php HTTP/1.1" + Environment.NewLine; message += "Host: kinoland.com.ua" + Environment.NewLine; Byte[] data = Encoding.GetEncoding("windows-1251").GetBytes(message); NetworkStream ns = tc.GetStream(); ns.Write(data, 0, data.Length); StreamReader reader = new StreamReader(ns, Encoding.GetEncoding("windows-1251")); string response = reader.ReadToEnd(); reader.Close(); return SocksType.Socks5; } catch (Exception ex) { return SocksType.Bad; } } При использовании библиотеки Mentalis таймаут можно установить но все равно не работает правильно, и при запуске функции в 10ти потоках процессор грузится на 100%. Code: public SocksType Check5(string host, int port) { try { ProxySocket s = new ProxySocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.ProxyEndPoint = new IPEndPoint(IPAddress.Parse(host), port); s.SendTimeout = 10; s.ReceiveTimeout = 10; s.ProxyType = ProxyTypes.Socks5; s.Connect("www.mentalis.org", 80); s.Send(Encoding.ASCII.GetBytes("GET / HTTP/1.0\r\nHost: www.mentalis.org\r\n\r\n")); int recv = 0; byte[] buffer = new byte[1024]; recv = s.Receive(buffer); string str = ""; str = Encoding.ASCII.GetString(buffer); s.Close(); return SocksType.Socks5; } catch (Exception ex) { return SocksType.Bad; } } Помогите дописать эти функции или скиньте свои исходники!
а зачем для этого использовать какие-то библиотеки? сокс5 протокол настолько простой, что можно написать полную поддерждку за несколько часов. а тебе нужно только подключиться, послать заголовок, и если ответ соответствует стандарту - сокс рабочий, если нет - не рабочий. вот документ на русском http://www.codenet.ru/webmast/socks51.php я бы например сделал так: и послал бы header серверу сразу после коннекта. если в ответ приходит два байта: 1-й == 5(версия) и 2-й==0(не требуется авторизации) то это сокс сервер. можешь для верности еще послать запрос на коннект
Просто не хочеться заниматся велосипедостроительством. Уверен, примеры кода работы с Socks есть у многих. Надеюсь кто-нибудь поделится исходниками или исправит мой код.
Да походу ничего нет нормального. У меня тоже задача не простая. Надо на .NET написать соксификатор и тулзу для построения цепи из соксов. Если интересно, можно скооперироваца.
велосипедостроительство и использовние библиотек для программы "Hello world!" разные вещи написал от балды за пару часов. никаких сторонних библиотек не использовал. допилю многопточность и выложу оффициально http://zalil.ru/32629466