Exemple #1
0
        public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
        {
            if (_proxies.Count == 0)
            {
                throw new InvalidOperationException(Resources.InvalidOperationException_ChainProxyClient_NotProxies);
            }
            List <ProxyClient> list;

            if (EnableShuffle)
            {
                list = _proxies.ToList();
                for (int i = 0; i < list.Count; i++)
                {
                    int         index = Rand.Next(list.Count);
                    ProxyClient value = list[i];
                    list[i]     = list[index];
                    list[index] = value;
                }
            }
            else
            {
                list = _proxies;
            }
            int       num        = list.Count - 1;
            TcpClient tcpClient2 = tcpClient;

            for (int j = 0; j < num; j++)
            {
                tcpClient2 = list[j].CreateConnection(list[j + 1].Host, list[j + 1].Port, tcpClient2);
            }
            return(list[num].CreateConnection(destinationHost, destinationPort, tcpClient2));
        }
Exemple #2
0
 public void AddProxy(ProxyClient proxy)
 {
     if (proxy == null)
     {
         throw new ArgumentNullException("proxy");
     }
     _proxies.Add(proxy);
 }
Exemple #3
0
 public static bool TryParse(string proxyAddress, out HttpProxyClient result)
 {
     if (ProxyClient.TryParse(ProxyType.Http, proxyAddress, out ProxyClient result2))
     {
         result = (result2 as HttpProxyClient);
         return(true);
     }
     result = null;
     return(false);
 }
Exemple #4
0
        /// <summary>
        /// Добавляет в цепочку новый прокси-клиент.
        /// </summary>
        /// <param name="proxy">Добавляемый прокси-клиент.</param>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxy"/> равно <see langword="null"/>.</exception>
        public void AddProxy(ProxyClient proxy)
        {
            #region Проверка параметров

            if (proxy == null)
            {
                throw new ArgumentNullException("proxy");
            }

            #endregion

            _proxies.Add(proxy);
        }
        /// <summary>
        /// Преобразует строку в экземпляр класса <see cref="Socks5ProxyClient"/>. Возвращает значение, указывающее, успешно ли выполнено преобразование.
        /// </summary>
        /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
        /// <param name="result">Если преобразование выполнено успешно, то содержит экземпляр класса <see cref="Socks5ProxyClient"/>, иначе <see langword="null"/>.</param>
        /// <returns>Значение <see langword="true"/>, если параметр <paramref name="proxyAddress"/> преобразован успешно, иначе <see langword="false"/>.</returns>
        public static bool TryParse(string proxyAddress, out Socks5ProxyClient result)
        {
            ProxyClient proxy;

            if (ProxyClient.TryParse(ProxyType.Socks5, proxyAddress, out proxy))
            {
                result = proxy as Socks5ProxyClient;
                return(true);
            }
            else
            {
                result = null;
                return(false);
            }
        }
Exemple #6
0
        /// <summary>
        /// Создаёт соединение с сервером через цепочку прокси-серверов.
        /// </summary>
        /// <param name="destinationHost">Хост сервера, с которым нужно связаться через прокси-сервер.</param>
        /// <param name="destinationPort">Порт сервера, с которым нужно связаться через прокси-сервер.</param>
        /// <param name="tcpClient">Соединение, через которое нужно работать, или значение <see langword="null"/>.</param>
        /// <returns>Соединение с сервером через цепочку прокси-серверов.</returns>
        /// <exception cref="System.InvalidOperationException">
        /// Количество прокси-серверов равно 0.
        /// -или-
        /// Значение свойства <see cref="Host"/> равно <see langword="null"/> или имеет нулевую длину.
        /// -или-
        /// Значение свойства <see cref="Port"/> меньше 1 или больше 65535.
        /// -или-
        /// Значение свойства <see cref="Username"/> имеет длину более 255 символов.
        /// -или-
        /// Значение свойства <see cref="Password"/> имеет длину более 255 символов.
        /// </exception>
        /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="destinationHost"/> равно <see langword="null"/>.</exception>
        /// <exception cref="System.ArgumentException">Значение параметра <paramref name="destinationHost"/> является пустой строкой.</exception>
        /// <exception cref="System.ArgumentOutOfRangeException">Значение параметра <paramref name="destinationPort"/> меньше 1 или больше 65535.</exception>
        /// <exception cref="Extreme.Net.Net.ProxyException">Ошибка при работе с прокси-сервером.</exception>
        public override TcpClient CreateConnection(string destinationHost, int destinationPort, TcpClient tcpClient = null)
        {
            #region Проверка состояния

            if (_proxies.Count == 0)
            {
                throw new InvalidOperationException(
                          Resources.InvalidOperationException_ChainProxyClient_NotProxies);
            }

            #endregion

            List <ProxyClient> proxies;

            if (EnableShuffle)
            {
                proxies = _proxies.ToList();

                // Перемешиваем прокси.
                for (int i = 0; i < proxies.Count; i++)
                {
                    int randI = Rand.Next(proxies.Count);

                    ProxyClient proxy = proxies[i];
                    proxies[i]     = proxies[randI];
                    proxies[randI] = proxy;
                }
            }
            else
            {
                proxies = _proxies;
            }

            int       length       = proxies.Count - 1;
            TcpClient curTcpClient = tcpClient;

            for (int i = 0; i < length; i++)
            {
                curTcpClient = proxies[i].CreateConnection(
                    proxies[i + 1].Host, proxies[i + 1].Port, curTcpClient);
            }

            curTcpClient = proxies[length].CreateConnection(
                destinationHost, destinationPort, curTcpClient);

            return(curTcpClient);
        }
 /// <summary>
 /// Преобразует строку в экземпляр класса <see cref="Socks5ProxyClient"/>.
 /// </summary>
 /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
 /// <returns>Экземпляр класса <see cref="Socks5ProxyClient"/>.</returns>
 /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception>
 /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception>
 /// <exception cref="System.FormatException">Формат порта является неправильным.</exception>
 public static Socks5ProxyClient Parse(string proxyAddress)
 {
     return(ProxyClient.Parse(ProxyType.Socks5, proxyAddress) as Socks5ProxyClient);
 }
 /// <summary>
 /// Инициализирует новый экземпляр класса <see cref="ProxyException"/> заданным сообщением об ошибке и прокси-клиентом.
 /// </summary>
 /// <param name="message">Сообщение об ошибке с объяснением причины исключения.</param>
 /// <param name="proxyClient">Прокси-клиент, в котором произошла ошибка.</param>
 /// <param name="innerException">Исключение, вызвавшее текущие исключение, или значение <see langword="null"/>.</param>
 public ProxyException(string message, ProxyClient proxyClient, Exception innerException = null)
     : base(message, innerException)
 {
     ProxyClient = proxyClient;
 }
Exemple #9
0
 public static HttpProxyClient Parse(string proxyAddress)
 {
     return(ProxyClient.Parse(ProxyType.Http, proxyAddress) as HttpProxyClient);
 }
Exemple #10
0
 public ProxyHandler(ProxyClient proxyClient)
 {
     this.proxyClient = proxyClient;
 }
 /// <summary>
 /// Преобразует строку в экземпляр класса <see cref="Socks4ProxyClient"/>.
 /// </summary>
 /// <param name="proxyAddress">Строка вида - хост:порт:имя_пользователя:пароль. Три последних параметра являются необязательными.</param>
 /// <returns>Экземпляр класса <see cref="Socks4ProxyClient"/>.</returns>
 /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="proxyAddress"/> равно <see langword="null"/>.</exception>
 /// <exception cref="System.ArgumentException">Значение параметра <paramref name="proxyAddress"/> является пустой строкой.</exception>
 /// <exception cref="System.FormatException">Формат порта является неправильным.</exception>
 public static Socks4ProxyClient Parse(string proxyAddress)
 {
     return ProxyClient.Parse(ProxyType.Socks4, proxyAddress) as Socks4ProxyClient;
 }