tproxy este un simplu proxy rutare TCP (strat 7) construit pe Geven_t, care vă permite să configurați logica de rutină în Python. & Nbsp; E puternic inspirat din mașină proxy dar au unele unic ca modelul lucrător pre-fork împrumutat la Gunicorn .
Instalare:
tproxy necesită Python 2.x> = 2.5. Suport 3.x Python este planificat.
Pip instala gevent
Pip instala tproxy
Pentru a instala de la sursa:
git git clone: //github.com/benoitc/tproxy.git
cd tproxy
PIP instala requirements.txt -r
python setup.py instala
Testați instalarea prin rularea linia de comandă:
Exemple tproxy / transparent.py
Și du-te pe http://127.0.0.1:5000, ar trebui să vedeți pagina de pornire Google.
Utilizare:
tproxy -h
Utilizare: tproxy [OPȚIUNI] script_path
Opțiuni:
& Nbsp; - numărul Versiune spectacol de program și de ieșire
& Nbsp; -h, help arată acest mesaj de ajutor și de ieșire
& Nbsp; - log-file = depune fișierul jurnal pentru a scrie la. [-]
& Nbsp; - log-nivel = LEVEL granularitatea rezultate jurnal. [Info]
& Nbsp; - log-config = fișierul Fișierul jurnal de configurare pentru a utiliza. [None]
& Nbsp; STRING N, --name = STRING
& Nbsp; O bază de utilizat, cu setproctitle pentru procesul de numire.
& Nbsp; [None]
& Nbsp ;-D, --daemon Daemonize procesul Gunicorn. [False]
& Nbsp FILE ;-p, --pid = FILE un nume de fișier pentru a utiliza pentru fișierul PID. [None]
& Nbsp; u USER, --user = user procese Comutare lucrător pentru a rula ca acest utilizator. [501]
& Nbsp; GROUP -g, --group = GROUP
& Nbsp; proces lucrător Comutare pentru a rula ca acest grup. [20]
& Nbsp; -m INT, --umask = INT O mască de biți pentru modul fișier de pe fișierelor scrise de
& Nbsp; Gunicorn. [0]
& Nbsp; ADRESA -b, --bind = ADRESA
& Nbsp; Priza de a lega. [127.0.0.1:8000]
& Nbsp; - restante = INT numărul maxim de conexiuni în așteptare. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; Numărul de proces lucrător pentru gestionarea cererilor.
& Nbsp; [1]
& Nbsp; - lucrători-conexiuni = INT
& Nbsp; numărul maxim de clienți simultan pe lucrător.
& Nbsp; [1000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; Lucrătorii tăcut pentru mai mult de atât de multe secunde sunt
& Nbsp; a ucis și repornit. [30]
Semnale
QUIT - închidere grațios. Opri acceptarea conexiunilor Îndată
& Nbsp; și așteptați până când toate conexiunile aproape
TERMEN - închidere rapidă. Opri acceptarea și închideți toate conexiuni
& Nbsp; după 10s.
INT - La fel ca TERMEN
HUP - reîncărcării grațios. Reîncarcă toți lucrătorii cu noul cod
& Nbsp; în script-ul de rutare.
USR2 - Upgrade tproxy pe zbor
TTIN - Creșterea numărului de lucrător de la 1
TTOU - Reduceți numărul de lucrător de la 1
Exemplu de script rutare
re import
re_host = re.compile ("Host:. s * (*) r n")
clasa CouchDBRouter (obiect):
& Nbsp; # privire la tabelul de rutare și de a reveni un nod CouchDB pentru a utiliza
& Nbsp; def căutare (de sine, nume):
& Nbsp; "" "a face ceva" ""
router = CouchDBRouter ()
# Efectuarea dependentă de conținut rutare bazată pe datele de flux. Aici,
# Informații antet gazdă de protocolul HTTP este analizat pentru a găsi
# Nume de utilizator și o rutină de căutare este rulat pe numele pentru a găsi corect
# CouchDB nod. Dacă nici un meci se poate face încă, nu fac nimic cu
# Conexiune. (Face server-ul dvs. couchone propriul ...)
def proxy (date):
& Nbsp; meciurile = re_host.findall (date)
& Nbsp; în cazul în care meciurile:
& Nbsp; gazdă = router.lookup (matches.pop ())
& Nbsp; întoarcere {"remote": host}
& Nbsp; a reveni Nici unul
Exemplul SOCKS4 proxy din 18 Linii
soclu import
struct import
def proxy (date):
& Nbsp; dacă len (date) <9:
& Nbsp; de returnare
& Nbsp; comanda = ord (date [1])
& nbsp; ip, port = socket.inet_ntoa (date [4: 8]) (date "> H", [2: 4]), struct.unpack [0]
& Nbsp; idx = data.index (" 0")
& nbsp; ID-ului utilizatorului = date [8: idx]
& Nbsp; dacă == comanda 1: #CONNECT
& Nbsp; dict retur (de la distanță = "% s:% s"% (ip, port),
& Nbsp; răspuns = " 0 X5a 0 0 0 0 0 0",
& Nbsp; de date = date [idx:])
& Nbsp; altfel:
& Nbsp; întoarcere {"aproape": " 0 x5b 0 0 0 0 0 0"}
Valorile Valabil returnare
& Nbsp; {"remote": string sau tuplu} - String este gazda: port al serverului care va fi aproximat.
& Nbsp; {"remote": String, "date": String} - La fel ca mai sus, dar trimite datele furnizate în loc.
& Nbsp; {"remote": String, "date": String, "răspuns": String} - La fel ca mai sus, dar răspunde cu datele furnizate inapoi la client
& Nbsp; Nu există - Nu face nimic.
& Nbsp; {"aproape": true} - Închiderea conexiunii.
& Nbsp; {"aproape": String} - Închideți conexiunea după trimiterea String.
Mâner erori
Puteți manipularea cu ușurință eroare prin adăugarea unei funcții proxy_error în script-ul:
def proxy_error (client, e):
& Nbsp; pass
. Această funcție obține instanța ClientConnection (conectare curent) ca primele argumente și excepția eroare în al doilea argument
Cerințe :
- python
Comentariile nu a fost găsit