voorloopnul.com/blog/a-python-proxy-in-less-than-100-lines-of-code/
A python proxy in less than 100 lines of code
A python proxy in less than 100 lines of code What is a tcp proxy? It's a intermediary server intended to act in name of a client, and sometimes to do something useful with the data before it reaches the original target. Let's see a picture: My idea was to
voorloopnul.com
출처 blog.naver.com/sim940228/220712268894
python tcp proxy server
http://voorloopnul.com/blog/a-python-proxy-in-less-than-100-lines-of-code/ A python proxy in less t...
blog.naver.com
번역)
100줄 이하 파이썬 프록시
TCP Proxy 란?
클라이언트의 이름으로 행동하거나 때때로는 원래의 타겟에 도착하기 전 데이터에 무언가 작업을 하기 위해 의도된 중간 서버
다음 그림을 보자.
내 아이디어는 기본 파이썬 라이브러리만을 사용하여 프록시 서버를 생성하고, 나는 다음에 나오는 개발 가이드를 준수하였다.
- 우리의 프록시를 위한 각각의 새로운 클라이언트 연결은 원래의 목적지의 새로운 연결을 생성 해야만한다.
- 우리의 프록시에 도착한 각각의 데이터 패킷은 본래의 목적지에 전달해주어야만 한다.
- target으로부터 받은 각각의 데이터 패킷은 올바른 클라이언트로 다시 전달되어야한다.
- 프록시는 여러 클라이언트를 받을 수 있어야만 한다.
- 빨라야 한다.
- 낮은 리소스 사용을 해야한다.
소스는 링크 참고하여주세요.
설명
class Forward()
: Forward 클래스는 프록시와 원격서버(원래의 타겟) 사이의 연결을 확립을 담당하고 있다.
class TheServer().main_loop()
: input_list 는 select.selct에 의해 관리되고 있는 사용할 수 있는 모든 소켓을 저장하고 있다. 처음에는 서버소켓이 저장된다. 소켓의 각각의 새로운 연결은 on_accept() 메소드를 트리거 할 것이다.
: 만약 현재의 소켓이 선택되어 리턴된 새로운 연결이 아니라면 이것은 수신되는 데이터(서버로부터 or 클라이언트로부터)로서 고려되어야 한다. 만약 데이터의 길이가 0이라면 요청을 닫고, 패킷은 올바른 목적지로 포워딩 되어야한다.
class TheServer().on_accept()
: 이 메소드는 원래의 타겟(proxy -> 원격 서버)의 새로운 연결을 생성한다. 그리고 현재의 클라이언트 연결(클라이언트->proxy)을 받는다. 소켓들은 input_list에 저장되어있으며 main_loop에 의해 핸들링된다. "channel" 디렉토리에는 목적지(client<=>server)쌍이 저장되어있다.
class TheServer().recv()
: 이 메소드는 오리지널 목적지에서 받은 데이터를 포워딩하고 진행시킨다. (client <- proxy -> server)
class TheServer().on_close()
: 프록시와 오리지널 서버 그리고 클라이언트와 프록시 사이의 소켓 연결을 제거한다.
[proxy.py 실행결과]

[server2.py 실행결과]

[client2.py 실행결과]

[출처] python tcp proxy server|작성자 물백묵
'[공부용]참고 사이트 모음 > [python]' 카테고리의 다른 글
파이썬 중급자를 위한 책 추천 (0) | 2021.01.18 |
---|---|
[Python] paramiko를 이용한 ssh접속 후 명령어 실행 - 서버점검 자동화 (0) | 2021.01.18 |
How the heck does async / await work in Python 3.5? (0) | 2021.01.15 |
[python] def 뒤에 -> None 또는 -> str 의미 (0) | 2021.01.14 |
[python]이벤트 루프 - 파이썬 설명서 주석판 (asyncio 관련) (0) | 2021.01.14 |