Socks Checker [C#]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by umanbest, 8 Jan 2012.

  1. umanbest

    umanbest New Member

    Joined:
    7 Dec 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Пытаюсь написать чекера 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;
                }
            }
    
    Помогите дописать эти функции или скиньте свои исходники!
     
  2. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    а зачем для этого использовать какие-то библиотеки?
    сокс5 протокол настолько простой, что можно написать полную поддерждку за несколько часов.
    а тебе нужно только подключиться, послать заголовок, и если ответ соответствует стандарту - сокс рабочий, если нет - не рабочий.
    вот документ на русском http://www.codenet.ru/webmast/socks51.php
    я бы например сделал так:
    и послал бы header серверу сразу после коннекта.
    если в ответ приходит два байта:
    1-й == 5(версия) и 2-й==0(не требуется авторизации)
    то это сокс сервер.
    можешь для верности еще послать запрос на коннект
     
  3. umanbest

    umanbest New Member

    Joined:
    7 Dec 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Просто не хочеться заниматся велосипедостроительством. Уверен, примеры кода работы с Socks есть у многих. Надеюсь кто-нибудь поделится исходниками или исправит мой код.
     
  4. Yazy4nik

    Yazy4nik New Member

    Joined:
    1 Feb 2012
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Да походу ничего нет нормального. У меня тоже задача не простая. Надо на .NET написать соксификатор и тулзу для построения цепи из соксов. Если интересно, можно скооперироваца.
     
  5. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    велосипедостроительство и использовние библиотек для программы "Hello world!" разные вещи
    написал от балды за пару часов. никаких сторонних библиотек не использовал.
    допилю многопточность и выложу оффициально
    http://zalil.ru/32629466