tproxy е прост TCP маршрутизация прокси (слой 7) построен върху Geven_t, която ви позволява да конфигурирате рутинна логика в Python & Nbsp;. Той е силно вдъхновен от прокси машина, но има някои уникални като модел предварително вилица работник назаем да Gunicorn ,
<Силен> Монтаж:
tproxy изисква Python 2.x> = 2.5. Предвижда се подкрепа Python 3.x.
PIP инсталирате gevent
PIP инсталирате tproxy
За да инсталирате от източник:
Git клонинг Git: //github.com/benoitc/tproxy.git
CD tproxy
PIP инсталирате -r requirements.txt
питон setup.py инсталиране
Тествайте вашата инсталация, като пуснете командния ред:
tproxy примери / transparent.py
И отиде на http://127.0.0.1:5000, можете да видите на началната страница на Google.
<Силен> Предназначение:
tproxy -Н
Употреба: tproxy [Опции] script_path
Опции:
& Nbsp; - номер на версията версия шоу програма и излизане
& Nbsp; -Н, --help покаже тази помощ съобщение и излизане
& Nbsp; - влезте-файл = Файл дневника, за да пишете. [-]
& Nbsp; - влезте ниво = LEVEL нееднородността на лог изходи. [Информация]
& Nbsp; - влезте-довереник = Файл Дневникът на довереник да използвате. [None]
& Nbsp; -п STRING, --name = STRING
& Nbsp; база, за да използвате с setproctitle за процес на именуване.
& Nbsp; [None]
& Nbsp ;-D, --daemon Daemonize процеса Gunicorn. [False]
& Nbsp ;-p FILE, --pid = подадете името на файла да използвате за файла PID. [None]
& Nbsp; -u USER, --user = потребителските процеси Switch работник да тече този потребител. [501]
& Nbsp; -G GROUP, --group = GROUP
& Nbsp; процес Switch работник да работи като тази група. [20]
& Nbsp; -т INT, --umask = INT A битова маска за режима на файл на файлове, написани от
& Nbsp; Gunicorn. [0]
& Nbsp; -b АДРЕС, --bind = АДРЕС
& Nbsp; Контактът да се обвърже. [127.0.0.1:8000]
& Nbsp; - изоставането = INT Максималният брой висящи връзки. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; Броят на процеса на работниците за разглеждане на заявления.
& Nbsp; [1]
& Nbsp; - работническо-връзки = INT
& Nbsp; Максималният брой едновременни клиенти един работник.
& Nbsp; [1000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; Работниците мълчи за повече от това много секунди са
& Nbsp; убити и рестартира. [30]
<Силни> Сигнали
QUIT - Graceful изключване. Спрете приема връзки незабавно се
& Nbsp; и изчакайте, докато всички връзки в близост
Срок - Fast изключване. Спрете приема и затворете всички conections
& Nbsp; след 10s.
INT - Същото като ТЕРМ
HUP - Graceful повторно товарене. Зареди всички работници с новия код
& Nbsp; във вашия маршрутизация скрипт.
USR2 - Upgrade tproxy в движение
TTIN - Увеличаване на броя на работниците от 1
TTOU - Намаляване на броя на работниците от 1
<Силен> пример именно за маршрутизация скрипт
внос повторно
re_host = re.compile ("Водещ:. S * (*) R Н")
клас CouchDBRouter (обект):
& Nbsp; # погледнете таблицата за маршрутизация и да се върнете на CouchDB възел за използване
& Nbsp; Def справка (самостоятелно, име):
& Nbsp; "" "направи нещо" ""
рутер = CouchDBRouter ()
# Извършване Content-Aware маршрутизация въз основа на данните за потока. Тук,
# Информация в заглавието домакин от HTTP протокола се прави разбор и да намерите най-
# Потребителско име и справка рутинно се провежда върху името, за да откриете правилните
# CouchDB възел. Ако няма съвпадение може да бъде още прави, не се прави нищо с
# Връзка. (Да направи своя собствена couchone сървъра ...)
Def прокси (данни):
& Nbsp; мачове = re_host.findall (данни)
& Nbsp; ако мачове:
& Nbsp; хост = router.lookup (matches.pop ())
& Nbsp; връщане {"дистанционно": домакин}
& Nbsp; върне None
<Силни> Пример SOCKS4 Proxy в 18 Lines
гнездо за внос
внос структура на
Def прокси (данни):
& Nbsp; ако Лен (данни) <9:
& Nbsp; връщане
& Nbsp; команда = РСР (данни [1])
& Nbsp; ПР, порт = socket.inet_ntoa (данни [4: 8]) (данни "> H", [2: 4]), struct.unpack [0]
& Nbsp; IDX = data.index (" 0")
& Nbsp; потребителски идентификатор = данни [8: IDX]
& Nbsp; ако командването == 1: #CONNECT
& Nbsp; връщане Dict (дистанционно = "% S:% S"% (IP, порт),
& Nbsp; отговора = " 0 Х5а 0 0 0 0 0 0",
& Nbsp = данни данни [IDX:])
& Nbsp; друго:
& Nbsp; връщане {"близо": " 0 x5b 0 0 0 0 0 0"}
Стойности Важи за връщане
& Nbsp; {"дистанционно": низ или кортеж} - String е домакин: порта на сървъра, които ще бъдат претеглени.
& Nbsp; {"дистанционно": String, "данни": String} - Същото като по-горе, но изпрати дадените данни, вместо.
& Nbsp; {"дистанционно": String, "данни": String, "отговор": String} - Същото като по-горе, но отговорете с дадени данни обратно на клиента
& Nbsp; None - не се прави нищо.
& Nbsp; {"близо": True} - прекъснете връзката.
& Nbsp; {"близо": String} - Затворете връзката след изпращане на низа.
<Силни> Работете грешки
Можете лесно отстраняване на грешките чрез добавяне на функция proxy_error в скрипта ви:
Def proxy_error (клиент, д):
& Nbsp; пас
. Тази функция получите ClientConnection инстанция (текущата връзка) като първите аргументи и изключение за грешка във втория аргумент
<силни> Изисквания
- Python
Коментари не е намерена