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计算已经过去多少个周末的方法
Jul 25 Python
浅谈五大Python Web框架
Mar 20 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
Python wxpython模块响应鼠标拖动事件操作示例
Aug 23 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
Python字典添加,删除,查询等相关操作方法详解
Feb 07 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
python help函数实例用法
Dec 06 Python
Python3.9.1中使用split()的处理方法(推荐)
Feb 07 Python
python抢购软件/插件/脚本附完整源码
Mar 04 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+Ajax验证码验证用户登录
2016/07/20 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
PHP分享图片的生成方法
2018/04/25 PHP
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
解析利用javascript如何判断一个数为素数
2016/12/08 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
js制作提示框插件
2020/12/24 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
python使用knn实现特征向量分类
2018/12/26 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Python logging模块handlers用法详解
2020/08/14 Python
我的梦想演讲稿
2014/04/30 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
乌镇导游词
2015/02/02 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript