tproxy

Software screenshot:
tproxy
Dettagli del software:
Versione: 0.5.4
Data di caricamento: 12 May 15
Sviluppatore: Benoit Chesneau
Licenza: Libero
Popolarità: 26

Rating: 3.0/5 (Total Votes: 2)

tproxy è una semplice delega di routing TCP (livello 7) costruito su Geven_t, che consente di configurare la logica di routine in Python. & Nbsp; E 'fortemente ispirato dalla macchina procura ma avere un po' unico come il lavoratore modello pre-forcella preso in prestito per Gunicorn .
Instalation:
tproxy richiede Python 2.x> = 2.5. È previsto il supporto Python 3.x..
pip installare gevent
pip installare tproxy
Per installare da fonte:
git clone git: //github.com/benoitc/tproxy.git
cd tproxy
Pip installare requirements.txt -r
python setup.py install
Metti alla prova la tua installazione eseguendo la riga di comando:
Esempi tproxy / transparent.py
E va in http://127.0.0.1:5000, si dovrebbe vedere la home page di Google.
Utilizzo:
tproxy -h
Utilizzo: tproxy [opzioni] script_path
Opzioni:
& Nbsp; - il numero di versione di versione esposizione del programma ed esce
& Nbsp; -h, --help mostra questo messaggio di aiuto ed esce
& Nbsp; - log-file = FILE Il file di registro di scrivere. [-]
& Nbsp; - a livello di log = LIVELLO La granularità delle uscite di registro. [Info]
& Nbsp; - log-config = FILE Il file di registro di configurazione da utilizzare. [Nessuno]
& Nbsp; STRING -n, --name = string
& Nbsp; Una base da usare con setproctitle per il processo di denominazione.
& Nbsp; [Nessuno]
& Nbsp ;-D, --daemon demonizzare il processo Gunicorn. [Falso]
& Nbsp FILE ;-p, --pid = FILE A nome del file da usare per il file PID. [Nessuno]
& Nbsp; -u USER, processi di switch di lavoro --user = UTENTE per l'esecuzione come questo utente. [501]
& Nbsp; GROUP -g, --group = GRUPPO
& Nbsp; del processo di lavoro Passa per l'esecuzione come questo gruppo. [20]
& Nbsp; -m INT, --umask = INT Una maschera di bit per la modalità di file sul file scritti da
& Nbsp; Gunicorn. [0]
& Nbsp; INDIRIZZO -b, --bind = INDIRIZZO
& Nbsp; La presa di legare. [127.0.0.1:8000]
& Nbsp; - backlog = INT Il numero massimo di connessioni in sospeso. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; Il numero di processo di lavoro per la gestione delle richieste.
& Nbsp; [1]
& Nbsp; - operai connessioni = INT
& Nbsp; Il numero massimo di connessioni simultanee per lavoratore.
& Nbsp; [1000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; I lavoratori in silenzio per più di questo numero di secondi sono
& Nbsp; ucciso e riavviato. [30]
Segnali
ESCI - Arresto regolare. Smettere di accettare connessioni immediatamente
& Nbsp; e attendere che tutte le connessioni vicino
TERM - spegnimento rapido. Smettere di accettare e chiudere tutti conections
& Nbsp; dopo 10s.
INT - Idem come TERM
HUP - ricarico Grazioso. Ricarica tutti i lavoratori con il nuovo codice
& Nbsp; nello script di routing.
USR2 - Aggiornamento tproxy al volo
Z IO NI - Aumentare il numero di lavoratori da 1
TTOU - Diminuire il numero di lavoratori da 1
Esempio di script di routing
re di importazione
re_host = re.compile ("Host:. s * (*) r n")
Classe CouchDBRouter (oggetto):
& Nbsp; # un'occhiata alla tabella di routing e restituisce un nodo couchdb da usare
& Nbsp; def lookup (self, name):
& Nbsp; "" "fare qualcosa" ""
router = CouchDBRouter ()
# Eseguire content-aware routing basata sui dati di flusso. Qui, la
# Informazioni di intestazione host dal protocollo HTTP viene analizzato per trovare il
# Username e una routine di ricerca viene eseguito sul nome per trovare il giusto
# Nodo couchdb. Se nessuna corrispondenza può essere ancora fatto, non fare nulla con la
Connessione #. (Rendere il proprio server couchone ...)
Proxy def (dati):
& Nbsp; fiammiferi = re_host.findall (dati)
& Nbsp; se le partite:
& Nbsp; host = router.lookup (matches.pop ())
& Nbsp; ritorno {"a distanza": host}
& Nbsp; restituire None
Esempio SOCKS4 Proxy in 18 Righe
Presa importazione
import struct
Proxy def (dati):
& Nbsp; se len (dati) <9:
& Nbsp; ritorno
& Nbsp; comando = ord (dati [1])
& nbsp; IP, porta = socket.inet_ntoa (dati [4: 8]), struct.unpack ("> H", i dati [2: 4]) [0]
& Nbsp; IDX = data.index (" 0")
& nbsp; userid = dati [8: idx]
& Nbsp; se il comando == 1: #connect
& Nbsp; dict ritorno (a distanza = "% s:% s"% (ip, porto),
& Nbsp; risposta = " 0 X5a 0 0 0 0 0 0",
& Nbsp; data = dati [idx:])
& Nbsp; il resto:
& Nbsp; ritorno {"close": " 0 X5b 0 0 0 0 0 0"}
I valori di ritorno valido
& Nbsp; {"a distanza": stringa o tuple} - String è l'host: porta del server che verrà inoltrata.
& Nbsp; {"a distanza": String, "dati": String} - Come sopra, ma inviare i dati forniti invece.
& Nbsp; {"a distanza": String, "dati": String, "risposta": String} - Come sopra, ma rispondere con dati forniti al client
& Nbsp; Nessuno - Non fare nulla.
& Nbsp; {"vicino": True} - Chiudere la connessione.
& Nbsp; {"vicino": String} - Chiudere la connessione dopo l'invio del String.
gestire gli errori
Si può facilmente la gestione degli errori con l'aggiunta di una funzione proxy_error nello script:
def proxy_error (client, e):
& Nbsp; passaggio
. Questa funzione ottiene l'istanza ClientConnection (connessione corrente) come primi argomenti e l'eccezione di errore nel secondo argomento

Requisiti

  • Python

Programmi simili

Sirious
Sirious

14 Apr 15

uwhoisd
uwhoisd

20 Feb 15

Squid
Squid

22 Jun 18

amms
amms

20 Feb 15

Altri software di sviluppo Benoit Chesneau

Restkit
Restkit

5 Jun 15

Couchapp
Couchapp

14 Apr 15

hroute
hroute

11 May 15

http-parser
http-parser

12 May 15

Commenti a tproxy

I commenti non trovato
Aggiungi commento
Accendere le immagini!