Python写的Socks5协议代理服务器,pythonsocks5
Python写的Socks5协议代理服务器,pythonsocks5
直接上代码:
#!/usr/bin/python # Filename s5.py # Python Dynamic Socks5 Proxy # Usage: python s5.py 1080 # Background Run: nohup python s5.py 1080 & import socket, sys, select, SocketServer, struct, time class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): pass class Socks5Server(SocketServer.StreamRequestHandler): 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 handle(self): try: pass # print 'from ', self.client_address nothing to do. sock = self.connection # 1. Version sock.recv(262) sock.send("\x05\x00"); # 2. 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 = "\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])) pass # print 'To', addr, port[0] nothing do to. else: reply = "\x05\x07\x00\x01" # Command not supported local = remote.getsockname() reply += socket.inet_aton(local[0]) + struct.pack(">H", local[1]) except socket.error: # Connection refused reply = '\x05\x05\x00\x01\x00\x00\x00\x00\x00\x00' sock.send(reply) # 3. Transfering if reply[1] == '\x00': # Success if mode == 1: # 1. Tcp connect self.handle_tcp(sock, remote) except socket.error: pass #print 'error' nothing to do . except IndexError: pass def main(): filename = sys.argv[0]; if len(sys.argv)<2: print 'usage: ' + filename + ' port' sys.exit() socks_port = int(sys.argv[1]); server = ThreadingTCPServer(('', socks_port), Socks5Server) print 'bind port: %d' % socks_port + ' ok!' server.serve_forever() if __name__ == '__main__': main()
SOCKS5介绍
如果您的机器具有一个合法的 Internet IP 地址, 或者您利用自己机器
上的调制解调器拨号上网, 可以自由和 Internet 上任何主机沟通, 那么您
通常不必关心 SOCKS5 协议。
SOCKS5 协议对于处在内部网络中的机器, 需要透过网络中某些可以联通
外部 Internet 的机器访问外部时,有用。
SOCKS5 是一个代理协议,它在使用 TCP/IP协议通讯的前端机器和服务器
机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet
网中的服务器,或者使通讯更加安全。
SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器, 模拟了
一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,
前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务
器将请求转发给真正的服务器。SOCKS5服务器在将通讯请求发送给真正服务器
的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务
器的响应后,也原样转发给前端。
因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议
都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但
是它能够忠实地转发通讯包,完成协议本来要完成的功能。
与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软
件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程序的修改和转
换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。
我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达
办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因
此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局
面。
不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件
地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能
利用SOCKS5代理服务器。
一个支持SOCKS5协议的前端,通常具有两种运行状态:
1)直接通讯状态,不使用SOCKS5接口。这时的通讯是针对最终服务器进行
的。
2)SOCKS5 状态。 使用 SOCKS5 接口将本来要发送给最终服务器的请求发
送给 SOCKS5 服务器。在前端和 SOCKS5 服务器进行初始化会话的时候,前端
告诉了 SOCKS5 服务器关于最终服务器的 IP 地址和端口信息,所以 SOCKS5
服务器能够忠实按照前端的要求启动和最终服务器的通讯过程。
端口要看 你的免费代理 是什么 地址也是 看他们提供 地址就是指那个代理的IP
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以http://开头的原因。
地址也是 HTTP 代理的 IP 和提供的端口 80...余下全文>>
所谓代理服务器 就是代理网络用户去取得网络信息。形象的说,它是网络信息的中转站.
简单的说就是 我需要看一本书,那本书就通过某个人来读给我听, 而那个读这本书就是代理了!
代理的作用
其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于浏览器和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
SOCKS5代理
SOCKS代理:SOCKS代理与其他类型的代理不同,它只是简单地传递数据包,而并不关心是何种应用协议,既可以是HTTP请求,所以SOCKS代理服务器比其他类型的代理服务器速度要快得多。SOCKS代理又分为SOCKS4和SOCKS5,二者不同的是SOCKS4代理只支持TCP协议(即传输控制协议),而SOCKS5代理则既支持TCP协议又支持UDP协议(即用户数据包协议),还支持各种身份验证机制、服务器端域名解析等。SOCK4能做到的SOCKS5都可得到,但SOCKS5能够做到的SOCKS则不一定能做到,比如我们常用的聊天工具QQ在使用代理时就要求用SOCKS5代理,因为它需要使用UDP协议来传输数据。
相关内容
- python脚本实现统计日志文件中的ip访问次数代码分享,
- Python通过解析网页实现看报程序的方法,python看报
- Python生成pdf文件的方法,
- 基于Python实现的扫雷游戏实例代码,python扫雷
- Python代码的打包与发布详解,python代码详解
- Python使用PyGreSQL操作PostgreSQL数据库教程,pygresqlpostgre
- python新手经常遇到的17个错误分析,python新手遇到17
- Python中apply函数的用法实例教程,pythonapply
- Python中zip()函数用法实例教程,python实例教程
- python处理文本文件实现生成指定格式文件的方法,
评论关闭