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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
python端口扫描系统实现方法
Nov 19 Python
Django实现自定义404,500页面教程
Mar 26 Python
Python实现的桶排序算法示例
Nov 29 Python
Python基于OpenCV实现视频的人脸检测
Jan 23 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
jupyter notebook运行命令显示[*](解决办法)
May 18 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
如何基于python实现年会抽奖工具
Oct 20 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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
人族 TERRAN 概述
2020/03/14 星际争霸
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
Python Tkinter简单布局实例教程
2014/09/03 Python
Python中文件操作简明介绍
2015/04/13 Python
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
物流专业大学的自我评价
2014/01/11 职场文书
高考寄语大全
2014/04/08 职场文书
校园文明标语
2014/06/13 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书