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代理 的含义是?地址,端口是什?HTTP代理又是什,它的地址,端口又该怎填写?

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...余下全文>>
 

怎使用SOCKS5代理服务器?

所谓代理服务器 就是代理网络用户去取得网络信息。形象的说,它是网络信息的中转站.
简单的说就是 我需要看一本书,那本书就通过某个人来读给我听, 而那个读这本书就是代理了!

代理的作用
其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于浏览器和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
SOCKS5代理
SOCKS代理:SOCKS代理与其他类型的代理不同,它只是简单地传递数据包,而并不关心是何种应用协议,既可以是HTTP请求,所以SOCKS代理服务器比其他类型的代理服务器速度要快得多。SOCKS代理又分为SOCKS4和SOCKS5,二者不同的是SOCKS4代理只支持TCP协议(即传输控制协议),而SOCKS5代理则既支持TCP协议又支持UDP协议(即用户数据包协议),还支持各种身份验证机制、服务器端域名解析等。SOCK4能做到的SOCKS5都可得到,但SOCKS5能够做到的SOCKS则不一定能做到,比如我们常用的聊天工具QQ在使用代理时就要求用SOCKS5代理,因为它需要使用UDP协议来传输数据。
 

评论关闭