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 15 Python
Python使用爬虫猜密码
Feb 19 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
python中强大的format函数实例详解
Dec 05 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
python 3.6.7实现端口扫描器
Sep 04 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
python匿名函数的使用方法解析
Oct 10 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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
phpMyAdmin 安装及问题总结
2009/05/28 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python将字母转化为数字实例方法
2019/10/04 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
挑战杯创业计划书的写作指南
2014/01/07 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
写景作文评语集锦
2014/12/25 职场文书
大四学生个人总结
2015/02/15 职场文书
暑期工社会实践报告
2015/07/13 职场文书
寒假致家长的一封信
2015/10/10 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle