tproxy is 'n eenvoudige TCP routing proxy (laag 7) gebou op Geven_t, wat kan jy die roetine logika in Python instel. & Nbsp; Dit is swaar geïnspireer van proxy masjien, maar het 'n paar unieke soos die pre-vurk werker model geleen om Gunicorn .
Instalation:
tproxy vereis Python 2.x> = 2.5. Python 3.x ondersteuning word beplan.
PIP gevent installeer
PIP tproxy installeer
Om te installeer van die bron:
git kloon git: //github.com/benoitc/tproxy.git
cd tproxy
PIP r requirements.txt installeer
python setup.py installeer
Toets jou installasie deur die loop van die command line:
tproxy voorbeelde / transparent.py
En gaan op http://127.0.0.1:5000, moet jy die Google-tuisblad sien.
Gebruik:
tproxy h
Gebruik: tproxy [OPSIES] script_path
Opsies:
& Nbsp; - weergawe show program se weergawe nommer en uitgang
& Nbsp; h, help uit te voer hierdie hulp boodskap en uitgang wys
& Nbsp; - log-lêer = Liasseer die log lêer om te skryf aan. [-]
& Nbsp; - log vlak = VLAK Die korrelig van log uitsette. [Info]
& Nbsp; - log-config = Liasseer die log konfigurasie lêer te gebruik. [Geen]
& Nbsp; -n STRING, --name = STRING
& Nbsp; 'n basis om te gebruik met setproctitle vir die proses benaming.
& Nbsp; [Geen]
& Nbsp ;-D, --daemon Daemonize die proses Gunicorn. [Vals]
& Nbsp ;-p FILE, --pid = FILE 'n lêernaam om te gebruik vir die PID-lêer. [Geen]
& Nbsp; -U gebruiker --user = USER Switch werker prosesse uit te voer as hierdie gebruiker. [501]
& Nbsp; G groep, --group = GROEP
& Nbsp; Switch werker proses om te hardloop as hierdie groep. [20]
& Nbsp; -M INT, --umask = INT N bietjie masker vir die lêer af op lêers geskryf deur
& Nbsp; Gunicorn. [0]
& Nbsp; -b ADRES, --bind = ADRES
& Nbsp; Die socket te bind. [127.0.0.1:8000]
& Nbsp; - agterstand = INT Die maksimum aantal hangende verbindings. [2048]
& Nbsp; w INT, --workers = INT
& Nbsp; Die aantal werker proses vir die hantering versoeke.
& Nbsp; [1]
& Nbsp; - werker-verbindings = INT
& Nbsp; Die maksimum aantal gelyktydige kliënte per werker.
& Nbsp; [1000]
& Nbsp; t INT, --timeout = INT
& Nbsp; Werkers stil vir meer as soveel sekondes is
& Nbsp; gedood en weer. [30]
Seine
Hou - Graceful afsluit. Stop verbindings aanvaar dadelik
& Nbsp; en wag totdat alle verbindings naby
TERM - Fast afsluit. Stop aanvaar en sluit al connecties
& Nbsp; ná 10s.
INT - Dieselfde as KWARTAAL
HUP - Graceful herlaai. Reload alle werkers met die nuwe kode
& Nbsp; in jou routing script.
USR2 - Upgrade tproxy op die vlieg
TTIN - Verhoog die aantal werker van 1
TTOU - Verminder die aantal werker van 1
Exemple van routing script
invoer re
re_host = re.compile ("Host:. s * (*) r n")
klas CouchDBRouter (voorwerp):
& Nbsp; # blik op die routing tafel en terugkeer n couchdb node te gebruik
& Nbsp; def lookup (self, naam):
& Nbsp; "" "iets te doen" ""
router = CouchDBRouter ()
# Doen inhoud bewus routing gebaseer op die stroom data. Hier is die
# Host header inligting van die HTTP protokol is ontleed om die vind
# Gebruikersnaam en 'n lookup roetine is hardloop op die naam om die korrekte vind
# Couchdb knoop. Indien geen wedstryd nog gemaak kan word, niks doen nie met die
# Verbinding. (Maak jou eie couchone bediener ...)
def proxy (data):
& Nbsp; wedstryde = re_host.findall (data)
& Nbsp; as wedstryde:
& Nbsp; gasheer = router.lookup (matches.pop ())
& Nbsp; terugkeer {"remote": host}
& Nbsp; terugkeer Geen
Voorbeeld SOCKS4 Proxy in 18 Lines
invoer socket
invoer struct
def proxy (data):
& Nbsp; as Len (data) <9:
& Nbsp; terugkeer
& Nbsp; command = ord (data [1])
& Nbsp; ip, hawe = socket.inet_ntoa (data [4: 8]), struct.unpack ("> H", data [2: 4]) [0]
& Nbsp; idx = data.index (" 0")
& Nbsp; id = data [8: idx]
& Nbsp; as opdrag == 1: #connect
& Nbsp; terugkeer dict (remote = "% s:% s"% (ip, hawe),
& Nbsp; antwoord = " 0 x5a 0 0 0 0 0 0",
& Nbsp; data = data [idx:])
& Nbsp; anders:
& Nbsp; terugkeer {"naby": " 0 x5b 0 0 0 0 0 0"}
Valid terugkeer waardes
& Nbsp; {"remote": string of tuple} - String is die host: port van die bediener wat sal proxy.
& Nbsp; {"remote": String, "data": String} - Dieselfde as hierbo, maar stuur die gegewe data in plaas.
& Nbsp; {"remote": String, "data": String, "antwoord": String} - Dieselfde as hierbo, maar antwoord met gegewe data terug na die kliënt
& Nbsp; Geen - Doen niks.
& Nbsp; {"naby": True} - Maak die verband.
& Nbsp; {"naby": String} - Maak die verband na die stuur van die tou.
Hanteer foute
Jy kan maklik hanteer fout deur die toevoeging van 'n proxy_error funksie in jou script:
def proxy_error (kliënt, e):
& Nbsp; pass
. Hierdie funksie kry die ClientConnection byvoorbeeld (huidige verband) as eerste argumente en die fout uitsondering in die tweede argument
Vereistes :
- Python
Kommentaar nie gevind