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_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
Python文件和流(实例讲解)
Sep 12 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
Python+Django搭建自己的blog网站
Mar 13 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
Python3之不使用第三方变量,实现交换两个变量的值
Jun 26 Python
python简单区块链模拟详解
Jul 03 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
基于python3实现倒叙字符串
Feb 18 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
Jupyter Notebook安装及使用方法解析
Nov 12 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
PHP之autoload运行机制实例分析
2014/08/28 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
Jquery读取URL参数小例子
2013/08/30 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
深入理解Python中变量赋值的问题
2017/01/12 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
写好自荐信需做到的5要点
2014/03/07 职场文书
教师考核评语
2014/04/28 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书