python socks5 proxy实现
来源:互联网 发布:淘宝权在哪直播 编辑:程序博客网 时间:2024/06/07 05:28
zz http://www.ietf.org/rfc/rfc1928.txt
http://www.ietf.org/rfc/rfc1929.txt
import socket, sys, select, SocketServer, struct, timeclass ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): passclass Socks5Server(SocketServer.StreamRequestHandler): passdct = {"123":"456"}; iplist = ['127.0.0.1']; def handle_tcp(self, sock, remote): fdset = [sock, remote] while True: r, w, e = select.select(fdset, [], []) if sock in r: if remote.send(sock.recv(4096)) <= 0: break if remote in r: if sock.send(remote.recv(4096)) <= 0: break def auth_user_pass(self, user, passwd): dic = self.__class__.passdct return dic.has_key(user) and passwd == self.__class__.passdct[user]; def handle(self): try: print 'socks connection from ', self.client_address, self.__class__.iplist sock = self.connection # 1. Version data = sock.recv(262) # no auth, \x05\x01\x00 # user/passwd auth, \x05\x03\x00\x03\x02 if self.client_address[0] in self.__class__.iplist: reply = b"\x05\x00" # no auth and ok else: reply = b"\x05\xff" if len(data) == 5: sock.send(b"\x05\x02"); # 2. append user/passwd data = self.rfile.read(2) username = self.rfile.read(ord(data[1])) passwd = self.rfile.read(ord(sock.recv(1)[0])) # auth it if self.auth_user_pass(username, passwd): reply = b"\x01\x00" else: reply = b"\x01\x01" sock.send(reply); # 3. Request data = self.rfile.read(4) mode = ord(data[1]) addrtype = ord(data[3]) if addrtype == 1: # IPv4 addr = socket.inet_ntoa(self.rfile.read(4)) elif addrtype == 3: # Domain name addr = self.rfile.read(ord(sock.recv(1)[0])) port = struct.unpack('>H', self.rfile.read(2)) reply = b"\x05\x00\x00\x01" try: if mode == 1: # 1. Tcp connect remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM) remote.connect((addr, port[0])) print 'Tcp connect to', addr, port[0] else: reply = b"\x05\x07\x00\x01" # Command not supported local = remote.getsockname() print "reply addr:", local reply += socket.inet_aton(local[0]) + struct.pack(">H", local[1]) sys.stdout.flush() except socket.error: # Connection refused reply = '\x05\x05\x00\x01\x00\x00\x00\x00\x00\x00' sock.send(reply) # 4. Transfering if reply[1] == '\x00': # Success if mode == 1: # 1. Tcp connect self.handle_tcp(sock, remote) except socket.error: print 'socket error'def main(): server = ThreadingTCPServer(('', 1080), Socks5Server) server.serve_forever()if __name__ == '__main__': main()
- python socks5 proxy实现
- Socks5代理Socks5 Proxy
- 使用httpclient 4.3实现 socks5 proxy + 身份验证
- 一个简单的Golang实现的Socks5 Proxy
- socks5 proxy for http proxy
- 简单实现Socks5代理(Python&C#)
- CentOS搭建Socks5 Proxy代理服务器
- socks5 proxy 转换 http proxy 的方法
- 在linux下为 git socks5 proxy
- 在Linux上搭建Socks5 Proxy代理服务器
- socks5
- socks5反向代理实现思路
- java实现一个socks5代理 <一>了解socks5协议
- 通过反向ssh连接+socks5+web-proxy来访问内网资源
- ubuntu12.04--change socks5 to http by proxy
- 用SS5在Linux上搭建Socks5 Proxy代理服务器
- 用SS5在Linux上搭建Socks5 Proxy代理服务器
- Python requests库编码 socks5代理问题
- 真正有效的喝水才能让身体真正有效吸收
- x86处理器几个控制寄存器的作用
- Android硬件抽象层(HAL)概要介绍和学习计划
- HDOJ 【C】 2012 素数判定
- Linux下用vi 打开文件出现乱码
- python socks5 proxy实现
- 在Ubuntu上为Android系统编写Linux内核驱动程序 .
- 如何设置Eclipse编辑器的默认文件打开方式
- Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序 .
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- GotGitHub
- mysql常用命令
- 软件工程之六 软件编码
- Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口