tproxy er en simpel TCP routing proxy (lag 7) bygget på Geven_t, som lader dig konfigurere den rutinemæssige logik i Python. & Nbsp; Det er stærkt inspireret af proxy maskine, men har nogle unikke ligesom pre-gaffel arbejdstager model lånt til Gunicorn .
Instalation:
tproxy kræver Python 2.x> = 2,5. Planlægges Python 3.x support.
pip installere gevent
pip installere tproxy
For at installere fra kilde:
git klon git: //github.com/benoitc/tproxy.git
cd tproxy
pip installere -r requirements.txt
python setup.py installere
Test din installation ved at køre kommandolinjen:
tproxy eksempler / transparent.py
Og gå på http://127.0.0.1:5000, bør du se Googles startside.
Anvendelse:
tproxy -h
Anvendelse: tproxy [OPTIONS] script_path
Valg:
& Nbsp; - udgave show programmets versionsnummer og afslut
& Nbsp; -h, --help vis denne hjælp besked og exit
& Nbsp; - log-file = Fil Logfilen at skrive til. [-]
& Nbsp; - log-niveau = PLAN granulering log udgange. [Info]
& Nbsp; - log-config = FIL Loggen konfigurationsfil til at bruge. [Ingen]
& Nbsp; -n STRING, --name = STRING
& Nbsp; En base til at bruge med setproctitle til processen navngivning.
& Nbsp; [Ingen]
& Nbsp ;-D, --daemon Daemonize den Gunicorn processen. [Falsk]
& Nbsp ;-P FILE, at --pid = FILE et filnavn bruge til PID-filen. [Ingen]
& Nbsp; -u USER, --user = BRUGER Skift arbejdstager processer til at køre som denne bruger. [501]
& Nbsp; -g GROUP, --group = GROUP
& Nbsp; Skift arbejdstager proces til at køre som denne gruppe. [20]
& Nbsp; -m INT, --umask = INT Lidt maske for filen tilstand på filer skrevet af
& Nbsp; Gunicorn. [0]
& Nbsp; -b ADRESSE, --bind = ADRESSE
& Nbsp; Stikket til at binde. [127.0.0.1:8000]
& Nbsp; - efterslæb = INT Det maksimale antal ventende forbindelser. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; Antallet af arbejdstager proces til håndtering af anmodninger.
& Nbsp; [1]
& Nbsp; - arbejdstager-tilslutninger = INT
& Nbsp; Det maksimale antal samtidige klienter pr arbejdstager.
& Nbsp; [1000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; Arbejdere tavs i mere end dette antal sekunder er
& Nbsp; dræbt og genstartes. [30]
Signaler
QUIT - Graceful nedlukning. Stoppe med at acceptere forbindelser aflukket
& Nbsp; og vente, indtil alle tilslutninger luk
TERM - Hurtig lukning. Stoppe med at acceptere og lukke alle conections
& Nbsp; efter 10'erne.
INT - Samme som TERM
HUP - Graceful ladning. Genindlæs alle arbejdstagere med den nye kode
& Nbsp; i din routing script.
USR2 - Opgrader tproxy om flyve
Indstillinge - Øge antallet af arbejdstager fra 1
TTOU - Mindsk antallet af arbejdstager fra 1
Exemple af routing script
import re
re_host = re.compile ("Host:. s * (*) r n")
class CouchDBRouter (objekt):
& Nbsp; # kig på routingtabellen og returnere en CouchDB node til at bruge
& Nbsp; def opslag (selv, navn):
& Nbsp; "" "gøre noget" ""
router = CouchDBRouter ()
# Udfør indhold-aware routing baseret på stream data. Her
# Host header information fra HTTP-protokollen analyseres for at finde den
# Brugernavn og et opslag rutine køres på navnet for at finde den korrekte
# CouchDB node. Hvis der kan gøres endnu ingen match, gøre noget med
# Forbindelse. (Gøre din egen couchone server ...)
def proxy (data):
& Nbsp; kampe = re_host.findall (data)
& Nbsp; hvis kampe:
& Nbsp; host = router.lookup (matches.pop ())
& Nbsp; tilbagevenden {"remote": host}
& Nbsp; returnere Ingen
Eksempel SOCKS4 Proxy i 18 Lines
import socket
import struct
def proxy (data):
& Nbsp; hvis len (data) <9:
& Nbsp; afkast
& Nbsp; kommando = ord (data [1])
& nbsp; ip, port = socket.inet_ntoa (data [4: 8]), struct.unpack ("> H", data [2: 4]) [0]
& Nbsp; IDX = data.index (" 0")
& nbsp; brugerid = data [8: IDX]
& Nbsp; hvis kommandoen == 1: #connect
& Nbsp; tilbagevenden dict (remote = "% s:% s"% (ip, port),
& Nbsp; svar = " 0 X5a 0 0 0 0 0 0",
& Nbsp; data = data [IDX:])
& Nbsp; andet:
& Nbsp; tilbagevenden {"tæt": " 0 x5b 0 0 0 0 0 0"}
Gyldig returværdier
& Nbsp; {"remote": snor eller tupel} - String er vært: port på den server, der vil blive proxy.
& Nbsp; {"remote": String, "data": String} - Samme som ovenfor, men sender de givne data i stedet.
& Nbsp; {"remote": String, "data": String, "svar": String} - Samme som ovenfor, men svare med givne data tilbage til klienten
& Nbsp; Ingen - Gør ingenting.
& Nbsp; {"lukke": Sandt} - Luk forbindelsen.
& Nbsp; {"lukke": String} - Luk forbindelsen efter afsendelse String.
Handle fejl
Du kan nemt håndtere fejl ved at tilføje en proxy_error funktion i dit script:
def proxy_error (klient, e):
& Nbsp; pass
. Denne funktion får ClientConnection instans (aktuelle forbindelse) som første argumenter og fejlen undtagelsen i andet argument
Krav :
- Python
Kommentarer ikke fundet