tproxy הוא פרוקסי פשוט ניתוב TCP (שכבת 7) נבנה על Geven_t, המאפשר לך להגדיר את ההיגיון שבשגרה בפייתון & nbsp;. זה השראה בכבדות מהמכונה proxy אבל יש לי כמה ייחודי כמו מודל העובד מראש מזלג ההשאלה לGunicorn .
שרותי:
tproxy דורש 2.x פייתון> = 2.5. תמיכת 3.x פייתון מתוכננת.
PIP להתקין gevent
PIP להתקין tproxy
כדי להתקין ממקור:
git clone git: //github.com/benoitc/tproxy.git
tproxy CD
PIP להתקין requirements.txt -r
פיתון setup.py להתקין
בדוק את ההתקנה שלך על ידי הפעלת שורת הפקודה:
דוגמאות tproxy / transparent.py
וללכת על http://127.0.0.1:5000, אתה צריך לראות את דף הבית של Google.
שימוש:
tproxy -h
שימוש: tproxy script_path [אפשרויות]
אפשרויות:
& Nbsp; - מספר הגרסה של תכנית תכנית הגרסה ויציאה
& Nbsp; -h, --help יציג הודעת עזרה זה וצא
& Nbsp; - יומן קובץ = קובץ קובץ היומן לכתוב ל. [-]
& Nbsp; - רמה-log = רמת הגרעיניות של תפוקות יומן. [מידע]
& Nbsp; - יומן config = קובץ קובץ הגדרות יומן לשימוש. [אין]
& Nbsp; STRING, --name = STRING -n
& Nbsp; בסיס לשימוש עם setproctitle לשמות תהליך.
& Nbsp; [אין]
& Nbsp תהליך Gunicorn ;-D, --daemon Daemonize. [שקר]
& Nbsp קובץ ;-p, --pid = קובץ שם הקובץ לשימוש עבור קובץ PID. [אין]
& Nbsp; -u משתמש, תהליכי עובד החלף --user = משתמש להפעיל כמשתמש זה. [501]
& Nbsp; קבוצת -g, --group = GROUP
& Nbsp; תהליך עובד החלף לרוץ כקבוצה זו. [20]
& Nbsp; -m INT, --umask = INT מסכה קצת למצב הקובץ בקבצים שנכתבו על ידי
& Nbsp; Gunicorn. [0]
& Nbsp; כתובת -B, --bind = כתובת
& Nbsp; השקע להיקשר. [127.0.0.1:8000]
& Nbsp; - צבר = INT המספר המרבי של חיבורים תלויים ועומדים. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; מספר התהליך עובד לטיפול בבקשות.
& Nbsp; [1]
& Nbsp; - עובד-חיבורים = INT
& Nbsp; המספר המרבי של לקוחות בו זמנית לעובד.
& Nbsp; [1,000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; עובדים שקטים יותר משניות רבות זה הן
& Nbsp; נהרג ומחדש. [30]
אותות
QUIT - כיבוי חינני. להפסיק לקבל חיבורים מיידית
& Nbsp; ולחכות עד שכל הקשרים קרובים
טווח - כיבוי מהיר. להפסיק לקבל ולסגור את כל conections
& Nbsp; לאחר 10s.
INT - זהה לטווח
"הופ - העמסה מחדש חיננית. רענן את כל העובדים עם הקוד החדש
& Nbsp; בתסריט הניתוב שלך.
USR2 - שדרוג tproxy על לטוס
TTIN - להגדיל את מספר העובדים מ 1
TTOU - להקטין את מספר העובדים מ 1
exemple של תסריט ניתוב
יבוא מחדש
re_host = re.compile ("מארח:. * s (*) r n")
הכיתה CouchDBRouter (אובייקט):
& Nbsp; # תסתכל על טבלת הניתוב ולחזור צומת couchdb להשתמש
& Nbsp; def בדיקה (עצמי שם,):
& Nbsp; "" "לעשות משהו" ""
הנתב = CouchDBRouter ()
# בצע ניתוב תוכן מודע המבוסס על נתוני הזרם. כאן,
# פרטי כותרת מארח מפרוטוקול HTTP הוא מנותחים למצוא
# שם משתמש ושגרת בדיקה מנוהל על שם כדי למצוא הנכון
צומת couchdb #. אם אין התאמה יכולה להתבצע עדיין, לא לעשות כלום עם
# חיבור. (להפוך את שרת couchone שלך ...)
פרוקסי def (נתונים):
& Nbsp; גפרורים = re_host.findall (נתונים)
& Nbsp; אם משחקים:
& Nbsp; מארח = router.lookup (matches.pop ())
& Nbsp; תמורה {"מרחוק": מארח}
& Nbsp; אין לחזור
דוגמא SOCKS4 פרוקסי בקווי 18
שקע יבוא
struct יבוא
פרוקסי def (נתונים):
& Nbsp; אם len (נתונים) <9:
& Nbsp; תשואה
& Nbsp; הפקודה = ORD (נתונים [1])
& Nbsp; ה- IP, יציאה = socket.inet_ntoa (נתונים [4: 8]) (נתונים "> H", [2: 4]), struct.unpack [0]
& Nbsp; IDX = data.index (" 0")
& Nbsp; זיהוי משתמש = נתונים [8: IDX]
& Nbsp; אם == הפקודה 1: #connect
& Nbsp; Dict תמורה (מרחוק = "% s% s"% (IP, יציאה),
& Nbsp; תשובה = " 0 x5a 0 0 0 0 0 0",
& Nbsp; = נתונים נתונים [IDX:])
& Nbsp; אחר:
& Nbsp; תמורה {"קרוב": " 0 x5b 0 0 0 0 0 0"}
ערכי החזרה תקף
& Nbsp; {"מרחוק:": מחרוזת או tuple} - מחרוזת היא המארח: יציאה של השרת שיהיה פרוקסי.
& Nbsp; {"מרחוק": מחרוזת, "נתונים": מחרוזת} - כנ"ל, אבל לשלוח את נתוני נתון במקום זאת.
& Nbsp; {"מרחוק": מחרוזת, "נתונים": מחרוזת, "תשובה": מחרוזת} - כנ"ל, אבל עניתי עם הנתונים נתון חזרה ללקוח
& Nbsp; אין - אל תעשה כלום.
& Nbsp; {"קרוב": נכון} - סגור את החיבור.
& Nbsp; {"קרוב": מחרוזת} - סגור את החיבור לאחר שליחת המחרוזת.
שגיאות ידית
אתה יכול בקלות טיפול שגיאה על ידי הוספת פונקצית proxy_error בתסריט שלך:
proxy_error def (הלקוח, ה):
& Nbsp; כרטיס
. פונקציה זו מקבלת למשל ClientConnection (חיבור נוכחי) כטיעונים הראשונים ולמעט השגיאה בטיעון שני
דרישות :
- פייתון
תגובות לא נמצא