. Bu ağır vekil makineden esinlenerek ancak ön çatal işçi modeli gibi bazı benzersiz ilgisi var Gunicorn ödünç;
tproxy Python rutin mantığı yapılandırmanızı sağlar & nbsp Geven_t üzerine inşa basit bir TCP yönlendirme vekil (katman 7), bir .
tesis:
tproxy Python 2.x> = 2.5 gerektirir. Python 3.x desteği planlanmaktadır.
gevent yüklemek pip
tproxy yüklemek pip
Kaynağından yüklemek için:
git clone git: //github.com/benoitc/tproxy.git
cd tproxy
-r requirements.txt yüklemek pip
Python yüklemek setup.py
Komut satırını çalıştırarak kurulum test edin:
tproxy örnekler / transparent.py
Ve google ana sayfasını görmelisiniz, http://127.0.0.1:5000 gidin.
Kullanım:
tproxy -h
Kullanımı: tproxy [Seçenekler] komut_dosyası_yolu
Seçenekler:
& Nbsp; - versiyon gösteri programın sürüm numarası ve çıkış
& Nbsp; -h, bu yardım iletisini ve çıkış göstermek help
& Nbsp; - =-log dosyası yazmak için günlük dosyasını DOSYA. [-]
& Nbsp; - log-level = DÜZEY günlüğü çıkışlarının taneciklik. [Info]
& Nbsp; - =-config log kullanmak için günlük config dosyasını DOSYA. [Yok]
& Nbsp; -n STRING, --name = STRING
& Nbsp; Bir baz işlem adlandırma setproctitle ile kullanmak.
& Nbsp; [Yok]
& Nbsp ;-D, --daemon Artalanda Gunicorn süreci. [False]
& Nbsp ;-p DOSYA, --pid = DOSYA bir dosya PID dosyası için kullanılacak. [Yok]
& Nbsp; -u KULLANICI, user = KULLANICI Anahtarı alt işlemler bu kullanıcı olarak çalıştırın. [501]
& Nbsp; -g GROUP, --group = GRUP
& Nbsp; Anahtarı alt işlem bu grup olarak çalıştırın. [20]
& Nbsp; -m INT, --umask = INT tarafından yazılmış dosyaları dosya modu için bir bit maskesi
& Nbsp; Gunicorn. [0]
& Nbsp; b ADRES, --bind = ADRES
Ve nbsp soketi bağlamak. [127.0.0.1:8000]
& Nbsp; - birikim = INT bekleyen bağlantı sayısı. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; isteklerini işlemek için çalışan işlem sayısı.
& Nbsp; [1]
& Nbsp; - İşçi-bağlantıları = INT
& Nbsp; işçi başına eşzamanlı istemcilerin sayısı.
& Nbsp; [1000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; İşçiler sessiz bu kaç saniye den fazla için
& Nbsp; öldürdü ve yeniden başlatılır. [30]
Sinyaller
ÇIK - Zarif kapatma. Anında bağlantılarını kabul etmemeye
& Nbsp; ve kadar tüm bağlantıları kapatmak bekleyin
DÖNEM - Hızlı kapatma. Kabul durdurun ve tüm conections kapatın
& Nbsp; 10s sonra.
INT - DÖNEM aynı
HUP - Zarif yeniden yükleme. Yeni kod ile tüm işçileri tekrar yükle
& Nbsp; yönlendirme komut.
USR2 - anında tproxy Yükseltme
Ba - 1 işçinin sayısını artırın
TTOU - 1 işçinin sayısını azaltın
yönlendirme script Exemple
ithalat yeniden
re_host = re.compile ("Host:. s * (*) r n")
sınıf CouchDBRouter (nesne):
& Nbsp; yönlendirme masada # bakmak ve kullanmak için bir CouchDB düğümü döndürür
& Nbsp; def arama (self, isim):
& Nbsp; "" "bir şeyler yapmak" ""
Yönlendirici = CouchDBRouter ()
# Dere verilere dayalı içerik farkında yönlendirme gerçekleştirin. İşte,
# HTTP protokolü Host başlık bilgilerini bulmak için ayrıştırılır
# Kullanıcı adı ve bir arama rutin doğru bulmak adına çalıştırılan
# CouchDB düğümü. Hiçbir maç henüz yapılamaz ise, hiçbir şey yapmak
# Bağlantısı. (Kendi couchone sunucu yapmak ...)
def vekil (data):
& Nbsp; maçlar = re_host.findall (veri)
& Nbsp; maçlarda eğer:
& Nbsp; host = router.lookup (matches.pop ())
& Nbsp; return {"uzak": konak}
& Nbsp; Hiçbiri geri
Örnek SOCKS4 proxy 18 Satır
ithalat soketi
ithalat yapı
def vekil (data):
& Nbsp; if len (veri) <9:
& Nbsp; return
& Nbsp; komutu = ord (veri [1])
& Nbsp; ip, port = socket.inet_ntoa (veri [4: 8]), struct.unpack ("> H" veri [2: 4]) [0]
& Nbsp; idx = data.index (" 0")
& Nbsp; kimliği = verileri [8: idx]
& Nbsp; eğer komut == 1: #connect
& Nbsp; return dict (uzaktan = "% s:% s"% (ip, port),
& Nbsp; cevap = " 0 X5a 0 0 0 0 0 0 ",
& Nbsp; data = veri [idx:])
& Nbsp; else:
& Nbsp; {"yakın": "X5b 0 0 0 0 0 0 0 "} return
Geçerli dönüş değerleri
& Nbsp; {"uzak": dize veya başlığın} - Dize ev sahipliği yapmaktadır: vekalet edilecek sunucunun port.
& Nbsp; {"uzak": String, "data": String} - Yukarıdaki gibi, ama verilen veri yerine geçecektir.
& Nbsp; {"uzak": String, "data": String, "cevap": String} - Yukarıdaki ile aynı ama müşteriye geri verilir verilerle cevap
& Nbsp; Yoktur - Hiçbir şey yapmayın.
& Nbsp; {"yakın": true} - bağlantısını kapatın.
& Nbsp; {"yakın": String} - dize gönderdikten sonra bağlantıyı kapatın.
Kulp hataları
Kolayca komut bir proxy_error işlevi ekleyerek hata işleme yapabilirsiniz:
def proxy_error (istemci, e):
& Nbsp; geçiş
. Bu fonksiyon, ilk argümanları ve ikinci argüman hata istisna olarak ClientConnection örneğini (geçerli bağlantı) olsun
Gereksinimleri :
- Python
Yorum Bulunamadı