tproxy ay isang simpleng TCP routing proxy (layer 7) na binuo sa Geven_t, na nagpapahintulot sa iyo na isaayos ang mga gawain na lohika sa Python. & Nbsp; mabigat Ito ay inspirasyon mula sa proxy makina ngunit may ilang mga natatanging hitsura ng mga modelo pre-tinidor worker hiram na Gunicorn .
Instalation:
nangangailangan tproxy Python 2.x> = 2.5. Pag sawa 3.x ay binalak.
PIP install gevent
PIP install tproxy
Upang i-install mula sa source:
git clone git: //github.com/benoitc/tproxy.git
cd tproxy
PIP install r requirements.txt
python setup.py install
Subukan ang iyong pag-install sa pamamagitan ng pagpapatakbo ng command line:
tproxy halimbawa / transparent.py
At pumunta sa http://127.0.0.1:5000, dapat mong makita ang google homepage.
Paggamit ng:
tproxy h
Usage: tproxy [OPTION] script_path
Mga pagpipilian:
& Nbsp; - numero ng bersyon bersyon show program at lumabas
& Nbsp; h, help ipakita ang tulong na mensahe at exit
& Nbsp; - mag-log-file = FILE Ang log file na magsulat sa. [-]
& Nbsp; --level log = LEVEL Ang granularity ng outputs log. [Info]
& Nbsp; - mag-log-config = FILE Ang log config file upang gamitin. [Wala]
& Nbsp; n STRING, --name = STRING
& Nbsp; A base upang gamitin sa setproctitle para sa proseso ng pagbibigay ng pangalan.
& Nbsp; [Wala]
& Nbsp ;-D, --daemon Daemonize proseso Gunicorn. [Mali]
& Nbsp ;-p FILE, --pid = FILE A filename upang gamitin para sa PID file. [Wala]
& Nbsp; -u USER, proseso Switch worker --user = USER upang tumakbo bilang user na ito. [501]
& Nbsp; g GROUP, --group = GROUP
& Nbsp; manggagawa sa proseso Lumipat upang tumakbo bilang grupo na ito. [20]
& Nbsp; m INT, --umask = INT A bit mask para sa file mode sa mga file na isinulat ng
& Nbsp; Gunicorn. [0]
& Nbsp; b ADDRESS, --bind = ADDRESS
& Nbsp; socket upang panagutin. [127.0.0.1:8000]
& Nbsp; - panustos = INT Ang maximum na bilang ng mga nakabinbin na koneksyon. [2048]
& Nbsp; w INT, --workers = int
& Nbsp; Ang bilang ng mga manggagawa sa proseso para sa mga kahilingan paghawak.
& Nbsp; [1]
& Nbsp; - worker-koneksyon = int
& Nbsp; Ang pinakamataas na bilang ng mga sabay-sabay na mga kliyente bawat manggagawa.
& Nbsp; [1000]
& Nbsp; t int, --timeout = int
& Nbsp; Workers tahimik para sa higit pa kaysa sa ilang segundo ay
& Nbsp; namatay at restart. [30]
Signal
Tumigil - Graceful shutdown. Ihinto ang pagtanggap ng koneksyon immediatly
& Nbsp; at maghintay hanggang sa isara ang lahat ng mga koneksyon
TERM - Fast shutdown. Ihinto ang pagtanggap at isara ang lahat conections
& Nbsp; pagkatapos ng 10s.
INT - Kapareho ng TERM
Hi - Graceful reloading. I-reload ang lahat ng manggagawa na may mga bagong code
& Nbsp; sa iyong routing script.
USR2 - I-upgrade tproxy sa fly
TTIN - Palakihin ang bilang ng mga manggagawa mula sa 1
TTOU - Bawasan ang bilang ng mga manggagawa mula sa 1
exemple ng routing script
import re
re_host = re.compile ("Host:. s * (*) r n")
klase CouchDBRouter (object):
& Nbsp; # pagtingin sa mga routing table at bumalik sa isang couchdb node gamitin
& Nbsp; def lookup (self, pangalan):
& Nbsp; "" "gawin ang isang bagay" ""
router = CouchDBRouter ()
# Magsagawa routing nilalaman-aware batay sa data stream. Dito, ang
# Impormasyon Host header mula sa HTTP protocol ay parse upang mahanap ang
# Username at isang gawain lookup ay tumakbo sa mga pangalan upang mahanap ang tamang
# Couchdb node. Kung maaari ay ginawa pa walang tugma, walang may gagawin
# Connection. (Gumawa ng iyong sariling mga couchone server ...)
def proxy (data):
& Nbsp; matches = re_host.findall (data)
& Nbsp; kung matches:
& Nbsp; host = router.lookup (matches.pop ())
& Nbsp; return {"remote": host}
& Nbsp; bumalik None
Halimbawa SOCKS4 Proxy sa 18 Lines
import socket
import struct
def proxy (data):
& Nbsp; kung len (data) <9:
& Nbsp; return
& Nbsp; command = 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; kung utos == 1: #connect
& Nbsp; return dict (remote = "% s:% s"% (ip, port),
& Nbsp; reply = " 0 x5a 0 0 0 0 0 0",
& Nbsp; data = data [idx:])
& Nbsp; pa:
& Nbsp; return {"close": " 0 x5b 0 0 0 0 0 0"}
Values Valid return
& Nbsp; {"remote:": string o tuple} - String ay ang host: port ng server na ay proxied.
& Nbsp; {"remote": String, "data": String} - Kapareho ng sa itaas, ngunit ipadala ang mga ibinigay na data sa halip.
& Nbsp; {"remote": String, "data": String, "reply": String} - Kapareho ng sa itaas, ngunit sumagot sa ibinigay na data pabalik sa client
& Nbsp; Wala - Walang gawin.
& Nbsp; {"close": True} - Isara ang connection.
& Nbsp; {"close": String} - Isara ang koneksyon pagkatapos ng pagpapadala ng String.
Hawakan error
Maaari mong madaling paghawak ng error sa pamamagitan ng pagdaragdag ng isang proxy_error function sa iyong script:
def proxy_error (client, e):
& Nbsp; pass
. Ang function na ito makuha ang ClientConnection Halimbawa (kasalukuyang koneksyon) bilang unang argumento at ang mga pagbubukod sa pangalawang argumento error
Kinakailangan :
- Sawa
Mga Komento hindi natagpuan