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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python爬虫DOTA排行榜爬取实例(分享)
Jun 13 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
PHP中一个控制字符串输出的函数
2006/10/09 PHP
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
2016/08/23 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
Node.js折腾记一:读指定文件夹,输出该文件夹的文件树详解
2019/04/20 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
Python中的hypot()方法使用简介
2015/05/18 Python
Python自动扫雷实现方法
2015/07/25 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
Python多线程通信queue队列用法实例分析
2020/03/24 Python
用python绘制樱花树
2020/10/09 Python
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
中考冲刺决心书
2014/03/11 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
党员发展大会主持词
2015/07/03 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
Python中itertools库的四个函数介绍
2022/04/06 Python