Ну с «неограниченностью» я конечно загнул. Ограничение в любом случае будет, но оно зависит от ресурсов компьютера или сервера, на котором будут запускаться прокси. Речь в статье пойдет о такой штуке как Tor. Многие ошибочно считают что Tor это какой-то портал в даркнет. Ха-ха. Tor — это такая штуковина, которая позволяет отправлять запросы к ресурсам скрывая свой IP-адрес. Все.
Сама программа Tor не только дает возможность нам отправлять запросы с другого IP, но и позволяет менять этот IP. Это чертовски полезно когда нам нужно выполнить большое количество запросов к ресурсу, который может по своему усмотрению ограничить запросы с IP или попросту внести его в черный список или попросту в бан. Конечно в идеале ресурс не должен нас блокировать, но как мы достигнем идеала, если не поймем пределы допустимого? А этого можно достигнуть только наткнувшись на ограничения, в том числе и на блокировки по IP.
Установка Tor
Все описанное ниже выполняется в Linux, в частности, Ubuntu Server. Если у вас винда, то советую поставить виртуалбокс и на него поставить Ubuntu Server. Понимаю что для заядлых виндаводов Linux да без графической оболочки реальный вынос мозга, но если вы встали на путь познания таких вещей как Tor и тому подобного, начинайте знакомиться с командной строкой и линуксом. Если игры в основном делают под винду, то серверный софт делают в большей степени под линукс и там этим пользоваться гораздо проще и удобнее.
sudo apt install tor
После этой команды у нас появится работающий прокси. Проверить его работоспособность можно простой командой.
wget -qO - https://api.ipify.org; echo
А потом выполняем
torsocks wget -qO - https://api.ipify.org; echo
Мы получим два IP, которые должны отличаться.

Ништяк! Tor у нас пашет. Проблема только в том, что он доступен у нас только внутри сервера. Иногда этого вполне достаточно, но бывает так, что нужно использовать прокси из вне. Для этого надо покопаться в настройках.
Если вам нужно управлять этим прокси, то в файле /etc/tor/torrc надо внести некоторые настройки.
Первым делом нам надо сгенерировать пароль
tor --hash-password MyPassword
Где вместо MyPassword указываем свой вариант пароля. Полученный хеш копируем и сохраняем где-нибудь. Он нам понадобится не один раз.
Открываем файл конфигурации
sudo nano /etc/tor/torrc
В самое начало вставляем
HashedControlPassword "Наш сгенерированный пароль"
Поскольку по умолчанию управляющий порт у нас 9051, то при массовом создании прокси, это может нам усложнить генерацию портов, а в дальнейшем использование прокси. Нам изначально лучше разнести эти два типа портов. Порт прокси оставим как есть, а вот порт управления сделаем другим. В файл конфигурации добавим ещё строку.
ControlPort 8150
Сохраняем, закрываем. На этом все, с настройками покончено.
Дальше кому как удобно. Мне было удобно делать все автоматически или полуавтоматически. У меня была необходимость запускать N-ое количество потоков, где каждый шарился по одноклассникам и собирал базу активных пользователей. То есть, если комп позволяет запустить 50 потоков, то под каждый поток надо запустить 50 прокси. Количество потоков может меняться и соответственно меняется и количество необходимых прокси. Поэтому был написан скрипт для тестирования, а потом я его внедрил в основную программу бота. Для запуска пачки прокси я запилил вот такой простенький скрипт.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os
from stem.control import Controller
from stem import Signal
WORKERS = 20
HASH_PASS = 'HashMyPass'
MY_PASS = 'MyPass'
SOCKS_PORT = 9051
CONTROL_PORT = 8151
def renew_tor_ip( control_port ):
with Controller.from_port(port = control_port ) as controller:
controller.authenticate( password=MY_PASS )
controller.signal( Signal.NEWNYM )
def renew_all_tor_ip():
for n in range( WORKERS ):
with Controller.from_port(port = ( CONTROL_PORT + n ) ) as controller:
controller.authenticate( password=MY_PASS )
controller.signal( Signal.NEWNYM )
if __name__ == "__main__":
for n in range( WORKERS ):
try:
os.mkdir( '/dev/shm/tor_{port}'.format( port=( SOCKS_PORT + n ) ) )
except:
pass
os.system( 'tor --RunAsDaemon 1 --CookieAuthentication 0 --HashedControlPassword "{pass}" --ControlPort {cport} --PidFile /dev/shm/tor{port}.pid --SocksPort {port} --DataDirectory /dev/shm/tor_{port}'.format( port=( SOCKS_PORT + n ), cport=( CONTROL_PORT + n ), pass=HASH_PASS ) )
Для запуска просто выполняете этот скрипт, а для смены IP в нужной программе делаете импорт и выполняете renew_tor_ip( control_port ) где control_port нужный порт. Или renew_all_tor_ip() для смены IP всех запущенных прокси.