Python写的Socks5协议代理服务器


Posted in Python onAugust 06, 2014

直接上代码:

#!/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()
Python 相关文章推荐
用python实现面向对像的ASP程序实例
Nov 10 Python
python实现web方式logview的方法
Aug 10 Python
python3实现UDP协议的服务器和客户端
Jun 14 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
Jul 04 Python
Python实现EXCEL表格的排序功能示例
Jun 25 Python
Python 3 判断2个字典相同
Aug 06 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
基于python实现文件加密功能
Jan 06 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
浅析Python __name__ 是什么
Jul 07 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
Python写的PHPMyAdmin暴力破解工具代码
Aug 06 #Python
Python写的Discuz7.2版faq.php注入漏洞工具
Aug 06 #Python
Python常用列表数据结构小结
Aug 06 #Python
Python生成pdf文件的方法
Aug 04 #Python
Tornado Web服务器多进程启动的2个方法
Aug 04 #Python
Python通过解析网页实现看报程序的方法
Aug 04 #Python
基于Python实现的扫雷游戏实例代码
Aug 01 #Python
You might like
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
在python里从协程返回一个值的示例
2019/02/19 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
毕业生幼师求职自荐信
2013/10/01 职场文书
学生实习自我鉴定
2013/10/11 职场文书
大学自荐信
2013/12/12 职场文书
实习自我鉴定
2013/12/15 职场文书
基层干部十八大感言
2014/01/19 职场文书
小学生家长评语集锦
2014/01/30 职场文书
cf收人广告词大全
2014/03/14 职场文书
新员工考核评语
2014/12/31 职场文书
刘公岛导游词
2015/02/05 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python