. 그것은 크게 프록시 기계에서 영감을하지만 사전 포크 작업자 모델과 같은 몇 가지 독특한이있어 Gunicorn하기 위해 빌린
tproxy는 파이썬에서 루틴 논리를 구성 할 수 있습니다 & NBSP Geven_t에 내장 된 간단한 TCP 라우팅 프록시 (레이어 7),이다 .
INSTALATION :
tproxy 파이썬 2.X> = 2.5가 필요합니다. 파이썬 3.x를 지원 예정이다.
gevent를 설치 PIP
tproxy를 설치 PIP
소스에서 설치하려면 :
자식 복제 자식 : //github.com/benoitc/tproxy.git
CD의 tproxy
-r requirements.txt를 설치 PIP
파이썬 설치 setup.py
명령 줄을 실행하여 설치를 테스트 :
tproxy 예 / transparent.py
그리고 당신은 Google 홈페이지를 참조해야 http://127.0.0.1:5000 이동합니다.
사용법 :
tproxy -h
사용법 : tproxy [옵션] script_path
옵션 :
& NBSP; - 버전 쇼 프로그램의 버전 번호와 종료
& NBSP; -h이 도움말 메시지와 출구를 표시 --help
& NBSP; - = - 로그 파일에 기록하는 로그 파일을 파일. [-]
& NBSP; - 로그 수준 = 레벨 로그 출력의 단위. [정보]
& NBSP; - = - 설정 로그 사용 로그 구성 파일을 파일. [없음]
이 & nbsp; -n 문자열, --name = STRING
& NBSP; 기본 프로세스 이름을 지정하는 setproctitle로 사용할 수 있습니다.
& NBSP; [없음]
& NBSP ;-D, --daemon 데몬으로 Gunicorn 과정. [거짓]
& NBSP ;-p FILE, --pid = FILE 파일 이름은 PID 파일을 사용합니다. [없음]
& NBSP; -u 사용자는, --user = 사용자 스위치 작업자 프로세스는이 사용자로 실행합니다. [501]
& NBSP; -g 그룹, --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; [1000]
& NBSP; -t INT, --timeout = INT
& NBSP; 노동자 침묵이 많은 초 개 이상의에 대한
& NBSP; 사망하고 다시 시작. [30]
신호
QUIT - 정상 종료. immediatly 연결을 수락 중지
& NBSP; 때까지 모든 연결 닫기를 기다립니다
TERM - 빠른 종료. 수신을 중단하고 모든 conections을 닫습니다
& NBSP; 10 초 후.
INT - 용어로 동일
HUP - 우아한 재로드. 새로운 코드로 모든 근로자를 다시로드
& NBSP; 라우팅 스크립트.
USR2은 - 즉석에서 tproxy 업그레이드
변 경는 - 1에서 노동자의 수를 증가
TTOU는 - 1에서 노동자의 수를 감소
라우팅 스크립트의 Exemple
수입 재
re_host = re.compile ( "호스트 :. S * (*) R 없음")
클래스 CouchDBRouter (객체) :
& NBSP; 라우팅 테이블에서 #의 모습과 사용하기 위해 CouchDB를 노드를 반환
& NBSP; 데프 조회 (자기 이름) :
& NBSP; "" "무언가를" ""
라우터 = CouchDBRouter ()
# 스트림 데이터를 기반으로 콘텐츠 인식 라우팅을 수행합니다. 여기서,
# HTTP 프로토콜에서 호스트 헤더 정보를 찾기 위해 파싱
# 사용자 이름 및 룩업 루틴을 찾기 위해 정확한 이름 실행될
# 1 CouchDB를 노드. 일치가 아직 이루어지지 않으면, 함께 아무것도하지
# 연결. (자신의 couchone 서버를 만들 ...)
DEF 프록시 (데이터) :
& NBSP; 경기 = re_host.findall (데이터)
& NBSP; 일치하는 경우 :
& NBSP; 호스트 = router.lookup (matches.pop ())
& NBSP; 반환 { "원격"호스트}
& NBSP; None을 반환
18 라인의 예 SOCKS4 프록시
수입 소켓
수입 구조체
DEF 프록시 (데이터) :
& NBSP; 경우 LEN (데이터) <9 :
& NBSP; 반환
& NBSP; 명령 = ORD (데이터 [1])
& NBSP; IP 포트 socket.inet_ntoa = (데이터 [4 : 8]), struct.unpack ( "> H", 데이터 [2 : 4]) [0]
& NBSP; IDX = data.index ( " 0")
& NBSP; 사용자 ID = 데이터 [8 : IDX]
& NBSP; 경우 명령 == 1 : #CONNECT
& NBSP; 반환 DICT (원격 = "% S : % S"% (IP, 포트),
& NBSP; 응답 = " 0 X5a 내지 0 0 0 0 0 0 ",
& NBSP; 데이터 = 데이터 [IDX :])
& NBSP; 다른 사람 :
& NBSP; { "가까운": "x5b 0 0 0 0 0 0 0 "} 반환
유효한 반환 값
& NBSP; { "원격": 문자열 또는 튜플} - 문자열 호스트는 다음과 같습니다 프록시 할 서버의 포트입니다.
& NBSP; { "원격": 문자열, "데이터"문자열} - 위와 동일하지만, 주어진 데이터를 대신 보낼 수 있습니다.
& NBSP; { "원격": 문자열, "데이터": 문자열, "응답": 문자열} - 위와 동일하지만, 다시 클라이언트로 주어진 데이터로 응답
& NBSP; 없음 - 아무것도하지 않습니다.
& NBSP; { "가까운"사실은} - 연결을 닫습니다.
& NBSP; { "가까운"문자열} - 문자열을 보낸 후 연결을 닫습니다.
오류 처리
당신은 쉽게 스크립트에서 proxy_error 기능을 추가하여 오류를 처리 할 수 있습니다 :
데프 proxy_error (클라이언트, E) :
& NBSP; 패스
이 함수는 첫 번째 인자와 두 번째 인수에 오류 예외로 ClientConnection 인스턴스 (현재 연결)을 얻을
요구 사항 : 있습니다.
파이썬
댓글을 찾을 수 없습니다