Как настроить прокси? Подъем собственных прокси. Создаем прокси сервер

Доброго дня друзья, многие из Вас задумываются над тем, как настроить свои индивидуальные прокси-сервера для работы в социальных сетях, в поисковых системах или для каких-то других целей. Многие возможно пробовали поднять собственные прокси, но результат не увенчался успехом, сегодня я хочу рассказать, как на примере одного из многочисленных сервисов можно настроить прокси для личного пользования, стоимость которых будет варьироваться от 80 рублей, в случае, если Вы будете поднимать не менее 5 прокси, и с каждым новым прокси цена за 1 прокси будет только уменьшаться. Так если поднимать 20 прокси, цена будет всего 58 рублей. Итак, приступим.

Регистрация сервера в сервисе Gigspace и заказ дополнительных ip

Первым делом нам необходимо арендовать сервер в сервисе Gigspace.ru , для этого переходим по >>ссылке << Нажимаем кнопку «Заказать» под VDS.

После этого нас перебрасывает на страницу заказа, но так как система у них до ума не доведена, нам нужно повторно перейти на страницу: http://gigspace.ru/vds_msk.php и уже на данной странице выбрать тарифный план.

После нажатия нас перебросит на страницу регистрации в системе, как нового клиента. Выбираем тип клиента — «Новый клиент».

Заполняем форму регистрации, демонстрировать не буду заполнение формы, так как там нужно вводить только Ваши данные, думаю, что любой справится с заполнением формы, если ищет тему поднятия собственных прокси.

После заполнения выбираем самый первый тарифный план, название которого GiGv-1 M1(230 руб./мес.)

Ниже указываем, что сервер будет без доменного имени и нажимаем кнопку «Дальше».

Далее выбираете период оплаты, я всегда оплачиваю на месяц пользования, так как порой на больший период нет необходимости заказывать прокси, но если на более длительный период будете оплачивать, получите скидку. Ставим галочку напротив пункта «Дополнительный IP (50 руб./мес.)», указываем количество ip, которые нам требуются, эти ip и будут нашими прокси-серверами, я указываю число 5, так как мне данных ip сейчас будет достаточно, Вы же можете заказать другое количество. Резервное копирование нам не нужно. Далее указываем промо-код. если получили. Для своих подписчиков я предоставляю промо-код на скидку 5%, но только после личного обращения ко мне на почту: [email protected] с темой письма ПРОМО-КОД Gigspace . После нажимаем на кнопку «Дальше».

На третьем шаге оформления заказа пишем в комментарий: «Добрый день! Дополнительные ip-адреса хотел бы использовать как прокси для работы в социальных сетях «, ну или что-то подобное. Если не написать, что ip будут использоваться для проксирования траффика, тогда нужно будет сделать дополнительные телодвижения по их настройке

После нажатия на кнопку нас перекидывает на страницу выбора способа оплаты, я всегда предпочитаю оплачивать через WebMoney или Яндекс Деньги, поэтому выбираю Вебмани. А Вы уже выбирайте на свое усмотрение, доступны QIWI, Яндекс Деньги, Вебмани и оплата при помощи Roboxchange (Робокасса).

Далее проходим стандартную процедуру оплаты счета через выбранную систему и ждем порядка 10 минут — 24 часов, все зависит от времени заказа услуги. В этом плане Gigspace медленные, но зато цены на услуги не кусаются. Как только Ваш виртуальный сервер будет создан, Вам на почту придет оповещение о создании сервера.

Настройка прокси-серверов при помощи терминала putty

Теперь приступим к самому интересному — настройке прокси-серверов. Сообщение в почту об успешном создании сервера нам пришло, теперь нас интересуют данные доступа к серверу по протоколу SSH, которые пришли нам в почту.

И программка для подключения к серверу по протоколу SSH, которая называется Putty, скачать ее можно по следующей >>ссылке <<

После того, как Вы скачали архив с программой, извлекаем архив и запускаем файл с названием «PUTTY.exe». Вводим ip адрес в поле «Host Name» и нажимаем «Open».

Теперь в окне ввода вводим логин, который пришел Вам в почту и пароль, пароль в Putty вводить нужно путем нажатия клавиш Shift+Insert, при вводе пароля, он не будет вообще отображаться, имейте это ввиду, после ввода пароля, нажимаем «Enter».

При успешном вводе пароля появится строка #

Если не появилась, повторите ввод пароля путем нажатия Shift+Insert.

Теперь нам нужно узнать наши ip-адреса, для этого снова идем в почту и находим следующее содержимое в сообщении.

Теперь напротив должен появиться список всех ip-адресов, которые Вы заказали, если этого списка нет, пишите в тикет, они порой забывают подключить доп ip, правда это было всего раз за время работы с gigspace. После того, как доп ip подключат, список отобразится.

Так как я подключаю дополнительно 5 ip, в списке у меня будет 1 основной ip и 5 моих дополнительных, т.е. мы сможем поднять 6 прокси всего.

Теперь снова возвращаемся к консоли putty, первым делом вводим команду ifconfig , чтобы определить, подключены ли дополнительные ip адреса к сетевой карте сервера. Если мы видим после ввода команды устройства venet0:0, venet0:1, и т.д., значит хостер настроил подключил к сетевой карте заказанные ip адреса, если этого нет, тогда можете подключить вручную, используя команду: ifconfig eth0:1 xxx.xxx.xxx.xxx 255.255.255.0 up , где xxx.xxx.xxx.xxx — это один из Ваших ip-адресов, аналогично посылаем команды для всех имеющихся ip, меняя при этом последнюю цифру в eth0:1 на eth0:2, eth0:3 и т.д.

После того, как убедились в том, что ip-адреса подключены к сетевой карте, нам нужно установить репозиторий epel для дальнейшей установки софта 3proxy для настройки прокси-сервера, так как данные хостеры предоставляют ОС centos 5, команда установки репозитория будет следующей: rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm . После установки в консоли отобразится следующее:

Теперь устанавливаем софт для настройки проксирования трафика 3proxy, для этого выполняем команду: yum install 3proxy -y . Дожидаемся окончания установки.

Установим удобный текстовый редактор nano, можно использовать стандартный, но мне больше по душе редактор nano. Выполняем команду: yum install nano .

Сделаем бэкап конфига 3proxy командой: mv /etc/3proxy.cfg /etc/3proxy.cfg.back .

Теперь отредактируем конфиг 3proxy, который и будет отвечать за работу наших прокси. Итак, выполняем команду: nano /etc/3proxy.cfg . Перед нами откроется пустой файл. Я предпочитаю настройку прокси с авторизацией по логину и паролю, поэтому продемонстрирую, как настроить прокси с авторизацией по логину и паролю. Вставляем в начало файла посредством нажатия клавиш Shift+Insert следующие строки:

daemon
auth strong
users username:CL:pass
flush
nserver 8.8.8.8
nscache 65536
timeouts 1 5 30 60 180 1800 15 60

конструкция auth strong отвечает за авторизацию по логину и паролю, при дальнейшем использовании прокси, username и pass — это логин и пароль по которому Вы хотите, чтобы были доступны прокси. :CL: трогать не нужно!

Если Вы хотите настроить авторизацию по ip, вместо auth strong пишем: auth iponly . Удаляем строку users… и добавляем доверенные для прокси ip-адреса, путем прописывания строк: allow * xxx.xxx.xxx.xxx . Где xxx.xxx.xxx.xxx — доверенный ip-адрес. Можно также задать несколько ip-адресов и логинов с паролями для прокси.

Теперь перейдем к настройке самих прокси, для Вас я подготовил файлик excel, который Вы можете скачать по >>ссылке <<, чтобы упростить работы с прописыванием прокси в конфиге. Http прокси прописываются следующим образом в конфиге:

proxy -n -a -p8050 -i192.168.0.1 -e192.168.0.1

Где порт Вы можете указать любой, от 1 до 65535, Вы уже на свое усмотрение порт прописываете, в целях безопасности советую использовать значения свыше 10000. 192.168.0.1 — это один из Ваших подключенных к серверу ip-адресов, которые Вы будете использовать в качестве прокси.

Socks прокси прописываются так:

socks -p1000 -i192.168.0.1 -e192.168.0.1

Аналогично, порт Вы ставите свой, ip тоже свой.

При помощи файла excel, который Вы скачали выше, можно быстро сделать необходимые для конфига конструкции, прописав вместо xxx.xxx.xxx.xxx свои ip адреса, обязательно заменить порты , и указать логины и пароли для прокси, скопировать имеющиеся конструкции со столбцов «результат http» и «результат socks», и вставить их в конфиг.

В конечном итоге полный конфиг будет выглядеть так:

Теперь нажимаем ctrl+x для сохранения конфига и нажимаем Y, для подтверждения сохранения файла, а затем нажимаем Enter.

Все, наш конфиг готов, записываем информацию в файл автозагрузки, выполнив команду: chkconfig 3proxy on

Запускаем 3proxy командой: service 3proxy start

Проверяем, работают ли наши прокси, я для проверки использую браузер Mozilla Firefox, для этого открываем Браузер, заходим в «Настройки»—>»Дополнительное»—>»Сеть»—>»Настроить», выбираем «Ручная настройка прокси сервера», вписываем один из наших ip и порт, который Вы прописали, применяем настройки. Теперь попробуем перейти на любой сайт. При появлении окна авторизации прокси, я Вас поздравляю, Вы все настроили Окно должно примерно такое появиться.

Теперь закрываем консоль командой exit или просто на крестик окна и довольствуемся настроенными прокси, друзья! 😉

Заключение

Сегодня я продемонстрировал, как настроить собственные прокси-сервера для анонимной работы в сети интернет. Сразу скажу, что хостеров помимо gigspace валом, но данные хостеры понравились мне именно тем, что они предоставляют разумную цену за дополнительные ip и сервера, которые стабильно работают.

Если Вы будете настраивать свои прокси у других хостеров, данный мануал частично подойдет для Вас, при возникновении вопросов с настройкой, можете обращаться в комментариях к данной записи, думаю, что смогу помочь в решении Ваших вопросов.

Не забываем подписываться на блог и делиться данной записью в соц сетях! Хватит платить посредникам, сделайте свои прокси за меньшую цену! А на рынке цены на прокси сейчас кусаются, уверяю. 😉

Я постараюсь в этой статье подробно описать то, как настроить прокси-сервер и с его помощью на стороне клиента подключаться к сети интернет. Программа, на которой будет осуществляться демонстрация этого, называется WinProxy (v.2.1R2f).

Прокси-сервер работает по принципу, показанному на рис. 1.

Рис. 1. Принцип работы прокси-сервера

Итак, после установки WinProxy, запускаем его. При первом запуске, появляется мастер настройки, который будет вести пошагово до конца базовой настройки WinProxy. Выберите тот IP адрес, через который вы будете предоставлять доступ к сети Интернет и нажмите «Add>>» (рис. 2).


Рис. 2. Настройка прокси-сервера

На рис. 2 Internal IP Addresses указывает на количество локальных адресов, через которые можно предоставлять доступ к сети Интернет. После выбора IP адреса переходим к следующему шагу.


Рис. 3. Настройка прокси-сервера

На рис. 3 отмечаем те протоколы, которые будут предоставляться пользователям (HTTP - для открытия интернет страничек, передачи файлов; FTP - для передачи файлов). Переходим к следующему шагу.


Рис. 4. Настройка прокси-сервера

На рис. 4 устанавливается порт, по которому будет вещаться протокол HTTP через прокси-сервер (он нужен для настройки прокси-сервера на клиенте).


Рис. 5. Настройка прокси-сервера

В следующем шаге производиться настройка почты (рис. 5). После настройки почты, указываем, нужно использовать Socks или нет, например, для использования Icq клиентом (рис. 6).


Рис. 6. Настройка прокси-сервера

В следующем шаге (рис. 7) указываем, использовать или нет модемное соединение.


Рис. 7. Настройка прокси-сервера

Если нет, то шаг на рис. 8 пропускается, если да то нужно указать модем (рис. 8).


Рис. 8. Настройка прокси-сервера

Шаг на рис. 9 позволяет использовать каскад прокси-серверов, например, если будущий прокси-сервер,


Рис. 9. Настройка прокси-сервера

также использует прокси-сервер, а не прямое соединение. В этом случае нужно указать настройки вашего прокси-сервера.



Следующий шаг (рис. 10) дает возможность выставлять на прокси-сервер пароль, который нужно будет вводить каждый раз при смене каких-либо настроек.


Рис. 11. Настройка прокси-сервера

Следующий шаг (рис. 11) дает возможность вести лог соединений (в лог файл записываются все соединения пользователей, скажем так, там отражается, кто куда ходил, что смотрел).


Рис. 10. Настройка прокси-сервера

Последний шаг (рис. 12) дает возможность включать или выключать показ соединения клиента в главном окне программы, например, соединения через socks на рис. 13.


Рис. 13. Настройка прокси-сервера

После настроек откроется текстовый файл, в котором будут прописаны все настройки вашего прокси-сервера, с помощью него клиенты смогут настроить свой компьютер, чтобы можно было пользоваться интернетом. Этот текстовый файл можно открыть в любое время перейдя в меню программы File -> Show Client Configuration.

Также можно настроить программу и не с помощью мастера, а перейдя в меню программы File -> Advanced Properties. На вкладке Users, можно произвести, кроме того, дополнительные настройки. На этой вкладке можно ограничить, некоторых пользователей, а также позволять распределять Интернет ресурс только на конкретные IP адреса или IP адрес (см. рис 14, 15).


Рис. 14. Настройка прокси-сервера


Рис. 15. Настройка прокси-сервера

На вкладке General, при включении функции WinProxy запускать как сервис, нужно учесть, что отрывать после этого вы не сможете. Вернее, сможете, но только до перезагрузки компьютера, но не пугайтесь т.к. это можно решить, если вручную добавить WinProxy в автозапуск, у меня после добавления в автозапуск было все нормально, и запускалось при старте, сворачивалось в трэй при закрытии, и мог, когда хотел, посмотреть, кто из клиентов использует прокси-сервер. Раздача Интернета на несколько сетей отображена на рис. 16.


Рис. 16. Настройка прокси-сервера (несколько сетей)

На этом особенности настройки прокси-сервера можно считать завершенными.

Теперь разберем то, как на клиенте настроиться под прокси-сервер. Все довольно просто, открываем браузер, например, Internet Explorer заходим в меню программы «Сервис»-> «Свойства обозревателя…». Переходим на вкладку подключение, т.к. мы раздаем интернет по локальной сети то переходим на «Настройка LAN» (рис. 17).


Рис. 17. Настройка прокси на клиенте

В появившемся окне прописываем параметры прокси-сервера, и так на каждой машине, использующей данный прокси-сервер (рис. 18).


Рис. 18. Настройка прокси на клиенте

И притом везде соблюдаем аналогию, например, для настройки браузера Opera, нужно пройти по пути «Инструменты» ->«Настройки» -> вкладка «Дополнительно» ->«Сеть» -> «Прокси-серверы» и там производится прописка прокси-сервера. Пример настройки прокси-сервера в менеджере закачек здесь.

Также есть еще программы, чтобы организовать прокси-сервер, например, Usergate. Могу добавить, что в UserGate можно делать привязку к mac-адресу, ограничить скорость соединения, что WinProxy не наблюдается (по крайней мере, в приведенной версии, которую я использовал пару лет назад).

  • Вперёд >

Вам нужен собственный прокси сервер? Вы не знакомы с Linux? Тогда эта статья для вас. Выполняя пошагово действия описанные ниже, вы сможете самостоятельно создать элитный прокси сервер (не определяется различными сервисами как прокси и скрывает ваш реальный IP), работающий на HTTP/HTTPS или SOCKS5 протоколах с авторизацией. Он просто незаменим, если имеются повышенные требования к качеству прокси. На выделенном вам IP будете только вы, а не ещё куча других пользователей, что отразится в конечном счете на качестве и стабильности. Даже так называемые «приватные прокси» не всегда могут быть приватными, вы не сможете проверить, сколько людей в реальности им пользуются. Учитывая сэкономленные деньги на услуге администрирования (10-30$) , ваши расходы составят только аренду VPS (от 1,8$ в мес.) и доп. IP (от 1,5-2$) если потребуются, что сравнимо с ценой «приватных прокси».

Итак, для начала нам нужен VPS (виртуальный выделенный сервер) желательно с KVM виртуализацией, т.к. на других типах виртуализации создание прокси часто запрещено и установленной операционной системой CentOS 7. Многие хостинги вообще запрещают создание прокси, поэтому, перед заказом VPS уточните этот нюанс у тех. поддержки. Пример подходящего московского хостинга. Имеют сервера в России (Москва), Швейцарии и Великобритании. Аренда VPS стоит от 104 рублей (!), доп. IP стоит 80р., можно подключить до 15 доп. IP на один сервер. Или вариант , имеют сервера на Украине, в Болгарии, Нидерландах и США. Сервер от 3,49$. Их тех. поддержка произвела хорошее впечатление. Эти два примера хостингов подобраны так, что страны расположения их серверов не повторяются, выбор за вами.

Получив данные доступа к заказанному серверу, приступаем к работе.

1. Подключаемся к серверу по ssh. Сделать это можно через программу PuTTY. В поле «Host name» вводите IP вашего сервера, порт оставляете по умолчанию 22.

PuTTY

При попытке входа ваш браузер может выдать сообщение, что-то вроде "Это соединение является недоверенным...", игнорируем его, добавляем в исключения и входим. После входа появится окно с командной строкой. Вводите логин и пароль данные вам. Обратите внимание, при вводе пароля он не отображается, т.е. как будто ничего не происходит.

После ввода нажав , вы увидите либо сообщение «Access denied», значит пароль введён не правильно или ваш логин в скобках подобно как на скрине.

2. Устанавливаем файловый менеджер mc:

3. Инсталируем библиотеку gcc необходимую для компиляции:

4. Загружаем 3proxy. Данную программу мы и будем использовать для создания прокси сервера. Версия 3proxy может измениться, укажите в строке ниже актуальную. (Актуально на 29.09.2018)

wget https://github.com/z3APA3A/3proxy/archive/0.8.12.tar.gz

5. Разархивируем скачанный архив командой:

tar -xvzf 0.8.12.tar.gz

6. Переходим в папку с распакованными файлами:

cd 3proxy-0.8.12

7. Компилируем:

make -f Makefile.Linux

Во время компиляции могут появляться следующие ошибки: "3proxy.c:1103: warning: pointer targets in passing…".

Ошибки при компиляции, кроме fatal, не страшны.

8. Создаем папки:

*Набрав и выполнив первую строку из списка ниже, не спешите печатать новую заново, досточно нажать стрелку "Вверх" на клавиатуре и будет набрана последняя команда. Допишите недостающее и всё.

Mkdir /usr/local/etc/3proxy
mkdir /usr/local/etc/3proxy/bin
mkdir /usr/local/etc/3proxy/logs
mkdir /usr/local/etc/3proxy/stat

9. Переносим исполняемый файл:

cp src/3proxy /usr/local/etc/3proxy/bin

10. Переносим файл для автозапуска:

cp ./scripts/rc.d/proxy.sh /etc/init.d/3proxy

11. Записываем информацию в файл автозагрузки:

chkconfig 3proxy on

12. Создаем новый конфигурационный файл:

touch /usr/local/etc/3proxy/3proxy.cfg

13. Выставляем права:

chown -R nobody:nobody /usr/local/etc/3proxy

14. Переходим в папку:

cd /usr/local/etc/3proxy

15. Запускаем файловый менеджер mc:

16. Настраиваем 3proxy.cfg, выбираем данный файл и нажимаем F4. Вариантов его настройки масса, ниже приведём относительно простой вариант соотвествующий нашим требованиям описанным в начале статьи.

#logs and shelf life
log /var/log/3proxy.log Drotate 3

Nserver 8.8.8.8
nserver 8.8.4.4

Pidfile /usr/local/etc/3proxy/3proxy.pid

#user and pass
users login:CL:pas
auth strong
flush
allow login
maxconn 200

Proxy -n -p7459 -i111.111.111.111 -e111.111.111.111
proxy -n -p7459 -i222.222.222.222 -e222.222.222.222

Socks -p2233 -i111.111.111.111 -e111.111.111.111
socks -p2233 -i222.222.222.222 -e222.222.222.222

Вставляем вместо "login" и "pas" ваши логин и пароль которые вы будете использовать при авторизации. Далее вместо едениц вписываете ваш IP, если у вас будет несколько IP - копируете эти строки и в каждой ставите новые IP, -p - номер порта, он тоже меняется на ваше усмотрение. В данной конфигурации используется 2 IP для работы по HTTP/HTTPS и SOCKS протоколам, если не нужен SOCKS - не прописывайте последние строки начинающиеся с socks. Сохраняем и выходим из mc.

17. Отключаем фаервол, если на сервере нет ничего кроме прокси и он явно не нужен.

service iptables stop

Если нужен, то можно добавть нужные нам порты в исключение.

iptables -I INPUT -p tcp --dport 7459 -m state --state NEW -j ACCEPT
iptables -I INPUT -p tcp --dport 2233 -m state --state NEW -j ACCEPT
service iptables save

Iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 7459 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 2233 -j ACCEPT
service iptables save

Либо вручную прописываем эти строки в /etc/sysconfig/iptables и перезагружаем iptables

Вместо "7459" и "2233" вписываете ваши порты.

18. Если у вас более 1 IP, их нужно прописать в систему:

ifconfig eth0:1 inet 222.222.222.222 netmask 255.255.255.0

Где 222.222.222.222 ваш доп. IP. Если IP адресов больше, ещё кроме IP каждый раз меняйте значение eth0:1 на eth0:2, eth0:3 и т.д.

19. Запускаем 3proxy:

service 3proxy start

Поздравляем! Теперь у вас есть свой элитный прокси сервер. Возможно, что после запуска может появиться сообщение как на скрине ниже - не обращайте внимание.

P.S. Недавно снова потребовался прокси сервер, попытался его поднять по своей же статье и... не получилось. Статье 4 года, за это время поменял хостинг, а там видимо свои нюансы. Если кратко, они используют внутренний IP отличный от внешнего, хотя это и предусмотрено в файле конфигурации сервера, но не работало. Устанавливалось соеденение, происходила авторизация, а дальше ошибка. Сервер на CentOS 7, версия 3proxy 0.8.12. Если у вас похожая проблема - попробуйте такой вот конфиг (3proxy.cfg):

Daemon log /usr/local/etc/3proxy/logs/3proxy.log Drotate 3 pidfile /usr/local/etc/3proxy/3proxy.pid nserver 8.8.8.8 nserver 8.8.4.4 nscache 65536 users login:CL:pas auth strong socks -p1234 -i111.111.111.111 -e111.111.111.111

Если вам нужен прокси (в данном случае socks 5 с авторизацией) без заморочек и лишних настроек - попробуйте этот конфиг, либо замените socks на proxy если нужно, главное - не указывайте IP. Не забудьте заменить логин и пароль на свои, ну и порт само собой. При попытке запустить прокси выдало ошибку о недостаточных правах. С помощью mc редактора нашел нужный файл и поставил права немного выше 644 для владельца и группы, этого оказалось достаточно - запустилось.

Мне часто задают вопросы возможно ли настроить собственные прокси на арендованных VPS. Ведь очевидно, если какие-то люди это делают и предоставляют доступ к своим прокси за деньги, то наверняка можно сделать это и самостоятельно. Это действительно так. Достаточно лишь обладать некоторыми знаниями и навыками. Задача настройки собственного прокси-сервера сводится к настройке специализированного софта, наподобие веб-сервера или СУБД.

Что такое прокси?

Прокси-сервер — это служба, которая позволяет перенаправлять запросы пользователя через себя и возвращать ему ответ. То есть трафик полностью проходит через какой то третий узел — проксируется. Как правило, прокси — это программа, которая запускается в режиме сервиса, или как их называют на сленге unix — демона (daemon). Такой софт использует стандартные сетевые возможности операционной системы, поэтому для обеспечения ее работы должны быть соблюдены некоторые условия. К примеру, необходимы IP-адреса, если вы хотите сделать множество прокси на своем VPS.

Прокси сервером также будет называться и весь виртуальный сервер или аппаратный, если на нем установлено соответствующее программное обеспечение и вы используете его как прокси.

Если не хочется разбираться!

Он умеет полностью заменять очень опытного и квалифицированного в вопросах настройки проксей системного администратора, услуги которого по этой теме стоят 2000 рублей за настройку одного сервера 🙂

  • Он умеет поднимать прокси на centos (6,7), debian и ubuntu (любых версий). То есть на любой из популярных ОС на хостингах он может поднять прокси. Но при наличии выбора рекомендуется Centos 7.
  • Он читает на вход только лишь список IP-адресов. Рядом с ним должен быть файл ip.list со списком адресов. Скрипт разбирает этот список, определяет настроены ли адреса на сетевом интерфейсе и предлагает настроить те адреса, что есть в списке, но недоступны (не «подняты», т.е. не сконфигурированы в самой OS). Если вы соглашаетесь на эти настройки, то всё поднимается и прописывается в автозагрузку.
  • Скрипт разбирает IPv6 и IPv4 в списке. И конфигурит все соответствующим образом.
  • Он умеет поднимать SOCKS и HTTP прокси. По-умолчанию только http, о соксах он спрашивает, и можно согласиться на их поднятие.
  • Скрипт генерирует для каждого прокси отдельную пару - логин-пароль. Логины вида user1, user2, .., userN. Пароли рандомные, из 8 символов.
  • Все прокси он поднимает на разных портах, которые берутся из заранее определенного диапазона портов. Для socks можно указать диапазон.
  • Скрипт загружает и компилирует из исходников актуальную версию 3proxy. Вся настройка именно на нём. Это очень хороший легкий прокси-сервер, созданный специально для подобных нужд. Может выдерживать очень большие нагрузки при относительно небольших ресурсах. (1000 прокси на каждый 1 GB RAM). Обкатано на десятках клиентов. У топовых клиентов поднимали до 16к прокси на одном сервере с 8 гб RAM.
  • В случае если прокси сервер уже был ранее установлен - скрипт это определит, и спросит нужно ли переустанавливать. Удобно при повторных запусках, если нужно переделать. В таких случаях скрипт перемещает старые конфиги и списки прокси, помечая их текущей датой-временем. Так что, в случае чего всегда можно вручную откатить с бэкапов, даже если что-то пойдёт не так.
  • Позволяет включить логгирование (интерактивно спрашивает об этом при настройке)
  • Создаёт удобный скрипт для запуска-перезапуска.
  • Прописывает старт прокси в автозагрузку
  • Прописывает задание в планировщик (cron) для рестарта проксей каждый час, во избежание зависаний.

Бонусом к скрипту идёт ещё один скрипт, который позволяет сгенерить список уникальных IP-адресов для сети IPv6 /48 - из каждой /64 сети получается один прокси. Поскольку IPv6 тоже набирает популярность, прокси на них получаются очень дешёвыми, поэтому продукт умеет работать и с этим.

Зачем нужен прокси?

С десяток лет назад, прокси по большей части использовались для управления контролем доступа в Интернет. Дело в том, что раньше каналы выдаваемые провайдерами были слабыми, а пользователей много.

На целую локальную сеть в десятки, а то и сотни машин выделялся один интернет-канал. Необходимо было предоставить всем этим пользователям доступ в интернет, да так, чтобы никого не обидеть, чтобы все могли полноценно его использовать и не чувствовать дискомфорта. Именно для распределения трафика были изначально придуманы эти службы. Впрочем, в корпоративных сетях это точно так же используется и поныне, поскольку позволяет именно контролировать доступ и работу сотрудников в глобальной сети.

Исходя из принципов его работы, у прокси появляется эффект, который ценится используется сейчас для получения доступов уже на уровне самого Интернета. Это подмена IP-адреса, с которого происходит обращение пользователя. Это позволяет анонимизировать работу в сети. Или организовать имитацию множества пользователей с одного рабочего места.

Зачем нужны прокси?

Сейчас это очень ценится людьми, которые занимаются SMM, SEO, созданием дорвеев — для организации парсинга, граббинга, регистрации множества аккаунтов в социальных сетях.

Итак, на этом покончим с введением и перейдем непосредственно к той части, за который вы наверняка сюда и пришли.

Где взять IP для работы прокси?

Прежде всего нужно зарегистрировать виртуальный сервер и получить для него IP-адреса. 1 адрес всегда выдается хостером по-умолчанию. За дополнительные адреса как правило взымается ежемесячная плата. Стоимость дополнительных адресов варьируется, на май 2016 года это около 60-150 рублей или 1-2$ у зарубежных хостеров. Это довольно дорого, особенно если прокси будут использоваться для каких-то «серых» дел вроде спама и регистрации аккаунтов — очень вероятна блокировка ваших адресов со стороны сервиса, с которым вы собираетесь работать. Поэтому сейчас очень популярно использование IPv6-адресов для создания прокси.

Что такое IPv6?

Изначально в протокол IP был заложен фундамент, который ныне исчерпывается. IPv4 адресов не хватает, а те что есть довольно дороги. Но организации, которые занимаются развитием глобальной сети, уже давно разработали новый протокол, который призван решить эту проблему с помощью IPv6-адресации. Его преимущество в том, что каждому пользователю выдается так много IP-адресов, что просто невозможно себе представить себе такие цели, для которых их окажется недостаточно. Так, минимальной единицей адресации является целая сеть с маской /64, которая позволяет использовать внутри себя около 18,4 триллионов триллионов (я просто не знаю какое это число 18,4*10^18).

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

Основная проблема заключается в том, что не все сервисы позволяют подключаться к себе с таких IP. Для перехода на IPv6 необходима техническая модернизация сетей. На данный момент многие крупные социальные сети и сервисы уже это сделали — в их числе Google, Yandex, VK, facebook, instagram и прочие.

Хорошая новость в том, что многие провайдеры предоставляют IPv6 сеть для арендованных VPS. Это значит, что вы можете использовать для настройки прокси именно такие адреса очень дешево. Достаточно лишь настроить службу прокси на работу с ними.

Однако, есть подводные камни. Эти адреса так же подвержены блокировке. И при неосторожном использовании сервисы вроде Гугла блокируют их целыми сетями, в которые входит все это огромное количество IP-адресов. Я не имею опыта использования таких прокси, поэтому вопрос как их использовать выходит за рамки моей компетенции. Я подразумеваю, что вы сами знаете как их использовать, и знаете обо всех рисках с этим связаных.

Если вам нужно немного прокси или на тест

Дешевые прокси поштучно

И здесь сделаем небольшое отступление. Дело в том, что настройка своего сервера может быть невыгодна, если вам нужно немного прокси. Десятки или даже пару сотен. Поскольку аренда VPS и настройка будет стоить значительно дороже, чем аренда нужного вам количества уже готовых индивидуальных прокси. И для тех, кому невыгодно заказывать такую настройку собственного VPS с proxy, нашелся более удобный вариант. Даже два.

Дешевые индивидуальные прокси по 40 руб и по прокси оптом по 30 рублей!

Доходят вести, что Takewyn, о котором речь чуть ниже, загибается, нет качества, нет наличия, нет еще чего… Но мир не стоит на месте. Когда что-то умирает, оно часто даёт дорогу чему-то новому, и это чаще всего не так уж плохо.

Как быстро настроить socks-прокси на своем VPS?

Достаточно пробросить динамический туннель на локальный интерфейс вашего компьютера с помощью ssh-клиента, которым вы обычно подключаетесь к своему серверу. Затем указать в настройках браузера проброшенный порт на локальном интерфейсе и вы будете ходить в интернете уже через свой socks-proxy.

Я подробно показывал как это настроить вот в такой инфографике:

Как сделать прокси с помощью SSH-туннеля:

Я сам часто использую этот способ, когда мне просто нужен что называется «анонимайзер», для посещения каких-то .

Стоимость настройки своих прокси

Очевидно, что это будет дешевле, нежели аренда прокси у соответсвующих компаний. Так, самый дешевый IPv6 прокси предоставляют в аренду, скажем за 10 рублей в месяц. И если их вам надо хотя бы тысячу, то это выливается в круглую сумму в десятки тысяч рублей в месяц. Тогда как вы можете поднять огромное количество IPv6 прокси на своем VPS всего за 500 рублей. Именно столько сейчас стоит аренда недорогого VPS у большинства хостеров. Можно найти и дешевле. Учитывая что, вы на нем можете запустить тысячи таких прокси для собственных нужд, экономию подсчитайте сами. Кроме того, арендуя прокси у сторонних компаний, никто не может вам гарантировать, что эти же прокси не отданы кому-то еще. Точнее, гарантировать то можно. Но это невозможно проверить. И если компания занимается оверселлингом — продажей якобы индивидуальных прокси нескольким пользователям — то эти прокси могут быть забанены, если вдруг ваш «сосед» будет работать не соблюдая мер предосторожности. В случае со своими прокси это исключено — это самые что ни на есть индивидуальные и элитные прокси, какие только могут быть.

Услуга поднятия IPv4 и IPv6 прокси серверов

С некоторых пор, друзья, я предоставляю услуги системного администрирования Linux. Поэтому настройка таких proxy напрямую входит в область моей компетенции. И если вам понадобится профессиональная помощь в этом деле, то буду рад принять ваши заявки на моем сайте vpsadm.ru , или напрямую в скайпе dr.motor. Цена вопроса от 2000 рублей за настройку VPS. Причем, количество прокси для меня при настройке не имеет значения — я могу вам запустить и 10000 IPv6 прокси (IPv6 сети /64 c тем огромным количеством адресов хостеры предоставляют бесплатно), или сотни IPv4 (если вы арендуете столько адресов у хостера).

Скрипт для быстрой автоматической настройки любого количества прокси на любом количестве серверов

К примеру, я могу подсказать где взять дешевые IPv4 адреса в больших количествах (от 30 рублей за адрес при партии в 1к адресов).

Стоимость IP-адресов

Можете без проблем также обращаться за консультациями любым удобным способом — хоть здесь в комментариях, хоть в нашей группе на

Позволят ускорить работу с SEO софтом и социальными сетями.

Теперь изучим, как можно создать HTTP прокси-сервер. Прокси-сервер - это посредник между пользователем и Интернетом. Допустим, что в вашей локальной сети есть сервер, который подключен выделенным каналом к Интернету. Чтобы все компьютеры получили доступ, нужно установить на сервере посредника, через который локальные компьютеры будут обращаться в глобальную сеть.

Прокси-сервер может маскировать IP-адреса, и в Интернете будет виден только адрес сервера, потому что запросы будут идти от его имени. Помимо этого, современные серверы могут кэшировать информацию и таким образом экономить входящий трафик.

В этой главе мы создадим прокси-сервер, который будет маскировать адрес (все запросы будут идти от имени сервера), но без возможности кэширования. Таким образом, связь будет как бы прозрачной.

Итак, перейдем к практике и изучим, как все работает изнутри. Для начала нужно определиться с используемой технологией. Что выбрать - блокировки, ожидания через select или события Windows? В нашей программе, когда пользователь запросит загрузить какой-либо сайт, мы должны будем получить этот сайт от сервера и передать его пользователю. Это отнимет много времени, и при использовании событий другие пользователи в данный момент работать не смогут.

Для осуществления параллельной работы нам необходимо применять потоки и для каждого подключения создавать собственный экземпляр. На первый взгляд это кажется сложным, но сейчас мы убедимся, что все намного проще, чем кажется.

Теперь переходим к реализации. Создайте новый проект. На форме нам понадобятся три поля ввода:

Порт, на котором будет работать наш сервер и ожидать подключения со стороны клиента; порт внешнего прокси-сервера, если наш должен будет перенаправлять запросы другому серверу. Таким образом, мы сможем строить цепочку из разных прокси-серверов;

Адрес внешнего прокси-сервера.

Помимо этого нужна кнопка, по нажатии которой будет запускаться прокси-сервер. Возможность остановки мы закладывать не будем, хотя эта операция заключается в простой остановке потока сервера.

Пример главной формы будущей программы показан на рис. 5.9.

Рис. 5.9. Форма будущего прокси-сервера

Загрузку сетевой библиотеки WinSock поместим на событие OnCreate для главной формы:

procedure THTTPProxyForm.FormCreate(Sender- TObject). var wData- WSADATA: begin if WSAStartup(MAKEWORDd.l). wData) <> 0 then begin MessageBox(0. "He могу загрузить WinSock". "Ошибка". 0): exit:

End: end:

По нажатии кнопки Запуск нужно запустить прокси-сервер. Для этого мы создадим отдельный поток, и в нем будем ожидать подключения от клиента, чтобы не задерживать работу главной формы. Блокировок в программе не будет.

Procedure THTTPProxyForm.bnStartClick(Sender: TObject). var st: TServerThread: begin st:= TServerThread.Create(true). st iLocal Port:" StrToIntDef(edPort.Text. 8088): st.iExtProxyPort -= StrToIntDef(edExtProxyPort Text. 8080): st.sExtProxyAddr:= edExtProxyAddr.Text: st.Resume: end:

Потоку сервера понадобится информация о том, на каком порте ему работать и где находится следующий сервер. Именно поэтому мы записываем эту информацию в открытые переменные сервера, чтобы они хранились локально. Нет смысла обращаться из потока к главной форме, потому что в будущем вы можете запустить два прокси-сервера на разных портах практически без модификации кода.

Теперь посмотрим на реализацию потока сервера. Для его создания выполните команду меню File New Other (для Delphi 6 и меньшей версии достаточно выбрать File New). Перед вами откроется диалоговое окно задания создаваемого элемента. Выберите Thread Object и нажмите ОК. Должно появиться диалоговое окно ввода имени потока. Введите TServerThread и нажмите ОК.

Полный исходный код (только без знакомых нам процедур проверки сообщений TestFuncError и TestWinSockError) вы можете увидеть в листинге 5.10.

Листинг 5.10. Код потока TServerThread

Unit ServerThreadUnit. interface uses Classes, winsock, windows; type TServerThread = class(TThread) private {Private declarations} protected procedure Execute: override: public i Local Port. i ExtProxyPort:Integer; sExtProxyAddr:Stri ng: end: implementation uses ClientThreadUnit:

procedure TestWinSockError(S:String): begin // Код этой процедуры нам знаком, поэтому урезан для экономии места

function TestFuncErrordErr:Integer: FuncName:String):Boolean; begin // Код этой функции нам знаком, поэтому урезан для экономии места

End; procedure TServerThread.Execute;

Листинг 5.10 (продолжение) var sServerListen. stClientSocket: TSOCKET: local-addr- sockaddMn: ct: TCIientThread; begi n

// Создание сокета

SServerListen:= socket(AF_INET. SOCK_STREAM, 0);

if SServerListen = INVALID_SOCKET then begin MessageBox(0. "Ошибка создания сокета". "Ошибка". 0): exit:

// Заполнение структуры адреса localaddr.sin_addr.s_addr:= htonl{INADDR_ANY): localaddr.sin_family:= AF_INET; localaddr.sin_port:= htonsdLocal Port):

// Связывание сокета с локальным адресом

If TestFuncError(bind(sServerListen. localaddr. sizeof(localaddr)) "bind") then exit:

// Запустить прослушивание

If TestFuncError(listen(sServerListen. 4), "Listen") then exit:

// Цикл обработки подключений от клиента

while true do begin // Принять соединение

StClientSocket:= accept(sServerListen, nil. nil): if StClientSocket = INVALID.S0CKET then continue: i

// Создать поток для общения с клиентом ct:= TClientThread.Create(true): ct.stClient:" StClientSocket: ct iExtProxyPort:= iExtProxyPort: ct sExtProxyAddr:= sExtProxyAddr; ct Resume:

End: end; end.

В разделе pub! i с добавлены три переменные: i Local Port, iExtProxyPort типа Integer и sExtProxyAddr, имеющая тип String. Мы уже пользовались этими переменными, когда рассматривали код создания потока, здесь же видно, как они объявлены.

Основной код серверного потока расположен в процедуре Execute. Сначала создается сокет и запускается прослушивание подключений на порте, указанном пользователем.

В бесконечном цикле while принимаются входящие соединения. Если получен корректный сокет, то создается еще один поток типа TClientThread. В этом потоке будет происходить непосредственное общение между клиентом и сервером. Поток будет выступать для клиента посредником для доступа к веб-страницам. Код потока TClientThread приведен в листинге 5.11.

Листинг 5.11. Поток, выступающий посредником между клиентом и web

Unit ClientThreadUnit.

i nterfасе uses

Classes, winsock. sysutils. windows: type TClientThread = class(TThread) private {Private declarations} protected procedure Execute: override; public iExtProxyPort: Integer; sExtProxyAddr: String: stClient: TSocket: end:

implementation {TClientThread} function LookupName(name: String): TInAddr; begin // Функция определения имени, которая нам знакома

// Функция отправки строки

Procedure SendStr(s: TSocket: str: String): begin TempStr:= str+#13+#10: CopyMemory(@sRecvBuff. PCharCTempStr). Length(TempStr)); send(s. sRecvBuff. Length(TempStr). 0); end; procedure TClientThread.Execute: var Buff: array of char: iPort: Integer: sRequest. sHost: String: server_addr: sockaddMn: продолжение &

Листинг 5.11 (продолжение) sock_server- TSocket: iMode. iSize: Integer-rfds: TFDSET. begin //////////////////////////// // Считывание заголовка //////////////////////////// RecvCstClient. Buff. 1024. 0):

SRequest:= String(Buff).

// Нет заголовка if sRequest = "" then begin CIoseSocket(stCl i ent). exit, end:

////////////////////////////

// Определяем адрес сервера и порта

//////////////////////////// sHost:= Copy (sRequest. PosCHost: ". sRequest). 255): Delete(sHost. Pos(#13. sHost), 255); Delete(sHost. 1, 6); iPort:= St rToIntDef(Copy (sHost. PosC:". sHost)+l. 255). 80): Delete(sHost. PosC:". sHost). 255):

// Если не найден host, то ошибка

If sHost = "" then. begin SendStr(stClient. "HTTP/1.0 400 Invalid header received from browser"); CIoseSocket(stCli ent); exit: end;

// Если есть внешний "проксик", то перенаправляем на него

If sExtProxyAddr<>" then begin iPort:= iExtProxyPort; sHost:= SExtProxyAddr; end:

sock_server-:= socket(AF_INET. S0CK_STREAM. 0): // Ищем прокси-сервер

Server_addr.sin_addr.s_addr:= htonl(INADDR_ANY): server_addr sin_family:= AF_INET: server_addr.sin_port .= htons(iPort): server_addr.sin_addr:= LookupName(sHost); 1

// Соединение с сервером

If connect(sock_server. server_addr. sizeof(server_addr)) = SOCKETJRROR then begin SendStr(stClient. "404 Host Not Found"); exit; end; iMode:= 1: setsockopt(sock_server. IPPR0T0_TCP. TCPJODELAY. @iMode. sizeof (integer)).

// Перенаправляем запрос серверу или другому "проксику" send(sock_server. buff, strlen(buff).0):

// Теперь работаем посредником между клиентом и сервером. // передавая запрошенные данные while true do begin // Добавляем сокеты в набор для ожидания FD_ZERO(rfds): FD_SET(stClient, rfds): FD_SET(sock_server. rfds); if (select(0. Orfds. nil. nil. ml) < 0) then exit; // Если пришел запрос от клиента. // то перенаправляем серверу if (FD_ISSET(stClient. rfds)) then begin iSize = recv(stClient. buff, sizeof(buff). 0); if iSize=-l then break; Send(sock_server. buff. iSize. 0); continue: end:

// Если пришли данные от сервера.

// то перенаправляем клиенту

If (FD_ISSET(sock_server, rfds)) then begin iSize:= recv(sock_server, buff. sizeof(buff). 0):

// Сервер уже все выслал if iSize = 0 then exit:

Листинг 5.11 (продолжение) SencKstClient. buff. iSize. 0): continue:

End; end: CloseSocket(stClі ent): CloseSocket(sock_server): end: end.

Для прокси-сервера в потоке TClientThread спрятано самое интересное, и сейчас мы это подробно рассмотрим. Единственное, что упущено в этом листинге, - уже знакомая нам функция LookupName.

Итак, когда клиент подключился к прокси-серверу, он посылает стандартный HTTP-запрос на получение какого-либо файла. Мы считываем этот заголовок с помощью функции recv. Заголовок выглядит следующим образом:

GET http://VAAo.vr-onl1ne.rU/HTTP/l.0 Accept: image/gif. image/x-xbitmap. image/jpeg. */* Accept-Language: ru User-Agent: Mozilla/4.0 (compatible: MSIE 6.0: windows NT 5.2: .NET CLR 1.1.4322) Host: www.vr-online.ru Proxy-Connection- Keep-Alive

Пока не будем вникать в суть запроса и содержащихся здесь команд, для нас сейчас главное - это строка host. В ней находится адрес сервера, с которого нужно получить данные и вернуть клиенту. В данном случае это www.vr-onlin.ru. Адрес известен, осталось выяснить порт. По умолчанию веб-серверы работают на порте 80, но если не так, то адрес веб-сервера будет указан следующим образом: www.vr-online.ru:Port. После двоеточия указывается номер порта, и мы должны учитывать этот нюанс.

Итак, получив заголовок, начинаем выбирать из него имя хоста:

SHost:= Copy(sRequest, Pos("Host: ". sRequest). 255): Delete(sHost. Pos(#13. sHost). 255); Delete(sHost. 1. 6);

Теперь отделяем номер порта, если он указан:

IPort:= StrToIntDef(Copy(sHost. PosC:". sHost)+l. 255). 80); Delete(sHost. PosC:". sHost), 255):

Если порт не указан, то функция StrToIntDef выдаст ошибку и возвратит значение, указанное по умолчанию, то есть 80.

Обязательно проверяем: если переменная sHost после разбора заголовка равна пустой строке, то адрес сервера не указан или указан неверно. В этом случае мы должны вернуть ошибку. Это можно сделать следующим образом:

SendStr(stClі ent. "HTTP/1.0 400 Invalid header received from browser");

После отправки ошибки закрываем сокет и выходим из потока.

Теперь проверяем: если указан внешний "проксик", то заменяем адрес и порт сервера на параметры внешнего прокси-сервера. В этом случае мы просто должны переслать на этот сервер запрос, полученный от клиента.

В принципе, если есть внешний прокси-сервер, то не было смысла определять адрес сервера. Но я делаю это в любом случае и вам советую, потому что в будущем может понадобиться переадресация. Например, если пользователь запрашивает страницу с сайта www.sex.ru, то наш прокси-сервер определит это и сможет переадресовать запрос на другой сервер. Для этого достаточно поменять значение переменной sHost и немного подкорректировать запрос, который поступил от клиента.

Определив нужные параметры, создаем новый сокет, с помощью которого будет происходить связь с внешним сервером (независимо от того, другой ли это прокси-сервер или непосредственно веб-сервер).

Создав новый сокет и подключившись к серверу, мы сразу же переводим его в асинхронный режим таким образом:

IMode:= 1: setsockopt(sock_server. IPPROTOJCP. TCP_NODELAY. OiMode. sіzeof(integer)):

Функция setsockopt в данном случае схожа по своему назначению с іoctl socket, рассмотренной нами в главе 4. Она переводит сокет в более быстрый режим работы, который позволяет не ожидать и не накапливать данные, а сразу же принимать и пересылать их. Таким образом мы минимизируем задержки, а накапливанием занимается сервер или клиент.

После перевода сокета в нужный режим перенаправляем веб-серверу (или следующему прокси-серверу) запрос от клиента и запускаем бесконечный цикл. Этот цикл и будет посредником. Здесь ожидаются данные от клиента и сервера и пересылаются друг другу. Если пришли пустые данные, то это значит, что соединение завершено, и цикл прерывается. Все открытые сокеты при выходе из процедуры закрываются.

Как видите, прокси-сервер - это всего лишь посредник, который пересылает пакеты между клиентом и сервером. Попробуйте добавить возможность просмотра того, что пересылается между клиентом и сервером, и вы увидите, что на запрос клиента, сервер передает только текстовое содержимое документа. После этого браузер разбирает полученный документ, и если находит картинки или другую дополнительную информацию (звуковые файлы, flash-ролики и т. д.), то идет дополнительный запрос на получение этих данных. Таким образом, браузер получает только те данные, которые ему нужны, и может экономить трафик.

Хочу также обратить ваше внимание на то, что в качестве номеров портов в исходном коде по умолчанию установлено значение 8080. Это связано с тем, что моя сеть настроена через прокси-сервер. Если вы используете DialUp, то в качестве порта внешнего "проксика" и адреса нужно указать пустые строки.

Для тестирования примера запустите нашу программу и сервер. Затем откройте Internet Explorer (или другой браузер) и настройте его на использование прокси-сервера. Для этого выполните команду меню Сервис Свойства обозревателя, и в появившемся диалоговом окне (рис. 5.10) перейдите на вкладку Подключение.

Рис. 5.10. Настройка браузера

Нажмите кнопку Настройка сети, и перед вами откроется новое диалоговое окно (рис. 5.11).


Рис. 5.11. Настройка прокси-сервера

В области Прокси-сервер установите флажок Использовать прокси-сервер и укажите адрес и порт. Если вы запускаете сервер на своем локальном компьютере, то можно указать 127.0.0.1, но я рекомендую указать реальный адрес, чтобы пример точно работал.

ПРИМЕЧАНИЕ ---1Исходный код рассмотренного здесь примера находится на компакт-диске в каталоге 5оигсе5\сп05\Н"ГТРРгоху.