tproxy adalah sederhana routing yang TCP proxy (lapisan 7) dibangun di atas Geven_t, yang memungkinkan Anda mengkonfigurasi logika rutin Python & nbsp;. Ini sangat terinspirasi dari mesin proxy tetapi memiliki beberapa unik seperti model pekerja pra-garpu dipinjam untuk Gunicorn .
Instalasi:
tproxy membutuhkan Python 2.x> = 2.5. Dukungan Python 3.x direncanakan.
pip menginstal gevent
pip menginstal tproxy
Untuk menginstal dari sumber:
git clone git: //github.com/benoitc/tproxy.git
cd tproxy
pip menginstal requirements.txt r
python setup.py install
Menguji instalasi Anda dengan menjalankan baris perintah:
contoh tproxy / transparent.py
Dan terus http://127.0.0.1:5000, Anda akan melihat homepage google.
Penggunaan:
tproxy h
Penggunaan: tproxy [OPTIONS] script_path
Pilihan:
& Nbsp; - nomor versi versi acara program dan keluar
& Nbsp; h, --help tampilkan pesan bantuan ini dan keluar
& Nbsp; - log-file = FILE File log untuk menulis ke. [-]
& Nbsp; - log-level = TINGKAT The granularity dari output log. [Info]
& Nbsp; --config log = FILE file log konfigurasi untuk menggunakan. [None]
& Nbsp; -n STRING, --name = STRING
& Nbsp; dasar A digunakan dengan setproctitle untuk proses penamaan.
& Nbsp; [None]
& Nbsp ;-D, --daemon daemonize proses Gunicorn. [Salah]
& Nbsp FILE ;-p, --pid = FILE file A digunakan untuk file PID. [None]
& Nbsp; u USER, user = PENGGUNA proses Beralih pekerja untuk menjalankan sebagai pengguna ini. [501]
& Nbsp; GROUP -g, --group = GROUP
& Nbsp; proses pekerja Beralih ke dijalankan sebagai grup ini. [20]
& Nbsp; -m INT, --umask = INT Sedikit masker untuk mode file pada file yang ditulis oleh
& Nbsp; Gunicorn. [0]
& Nbsp; ALAMAT -b, --bind = ALAMAT
& Nbsp; Soket untuk mengikat. [127.0.0.1:8000]
& Nbsp; - backlog = INT Jumlah maksimum koneksi tertunda. [2048]
& Nbsp; w INT, --workers = INT
& Nbsp; Jumlah pekerja proses untuk menangani permintaan.
& Nbsp; [1]
& Nbsp; - pekerja-koneksi = INT
& Nbsp; Jumlah maksimum klien simultan per pekerja.
& Nbsp; [1000]
& Nbsp; t INT, --timeout = INT
& Nbsp; Pekerja diam selama lebih dari ini banyak detik yang
& Nbsp; tewas dan restart. [30]
Sinyal
QUIT - Shutdown Graceful. Berhenti menerima koneksi immediatly
& Nbsp; dan menunggu sampai semua hubungan dekat
JANGKA - Shutdown Cepat. Berhenti menerima dan menutup semua conections
& Nbsp; setelah 10s.
INT - Sama seperti JANGKA
HUP - reload Graceful. Reload semua pekerja dengan kode baru
& Nbsp; dalam naskah routing.
USR2 - Tingkatkan tproxy dengan cepat
TTIN - Meningkatkan jumlah pekerja dari 1
TTOU - Penurunan jumlah pekerja dari 1
Exemple script routing yang
import re
re_host = re.compile ("Host:. s * (*) r n")
kelas CouchDBRouter (objek):
& Nbsp; # lihat tabel routing dan kembali node couchdb menggunakan
& Nbsp; def lookup (self, nama):
& Nbsp; "" "melakukan sesuatu" ""
router = CouchDBRouter ()
# Lakukan routing konten menyadari berdasarkan data aliran. Di sini,
# Informasi header host dari protokol HTTP parsing untuk menemukan
# Username dan rutinitas lookup dijalankan pada nama untuk menemukan yang benar
# Couchdb simpul. Jika tidak cocok dapat dibuat belum, melakukan apa-apa dengan
# Koneksi. (Membuat server couchone sendiri ...)
def proxy (data):
& Nbsp; pertandingan = re_host.findall (data)
& Nbsp; jika pertandingan:
& Nbsp; host = router.lookup (matches.pop ())
& Nbsp; kembali {"remote": tuan}
& Nbsp; kembali Tidak
Contoh SOCKS4 Proxy di 18 Garis
socket impor
impor struct
def proxy (data):
& Nbsp; jika len (data) <9:
& Nbsp; kembali
& Nbsp; perintah = 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; userid = Data [8: idx]
& Nbsp; jika perintah == 1: #connect
& Nbsp; pulang dict (remote = "% s:% s"% (ip, port),
& Nbsp; balasan = " 0 x5a 0 0 0 0 0 0",
& Nbsp; data = Data [idx:])
& Nbsp; yang lain:
& Nbsp; kembali {"dekat": " 0 x5b 0 0 0 0 0 0"}
Nilai Hari pulang
& Nbsp; {"remote:": string atau tuple} - String adalah host: port dari server yang akan proxy.
& Nbsp; {"remote": String, "data": String} - Sama seperti di atas, tapi mengirim data yang diberikan sebagai gantinya.
& Nbsp; {"remote": String, "data": String, "balasan": String} - Sama seperti di atas, tapi membalas dengan data yang diberikan kembali ke klien
& Nbsp; Tidak - Apakah tidak ada.
& Nbsp; {"dekat": Benar} - Tutup sambungan.
& Nbsp; {"dekat": String} - Tutup koneksi setelah mengirim String.
Menangani kesalahan
Anda dapat dengan mudah menangani error dengan menambahkan fungsi proxy_error dalam script Anda:
def proxy_error (client, e):
& Nbsp; lulus
. Fungsi ini mendapatkan contoh ClientConnection (koneksi saat ini) sebagai argumen pertama dan pengecualian kesalahan dalam argumen kedua
Persyaratan :
- Python
Komentar tidak ditemukan