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之PyUnit单元测试实例
Oct 11 Python
Python常用内置函数总结
Feb 08 Python
Python实现竖排打印传单手机号码易撕条
Mar 16 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
Python简单实现安全开关文件的两种方式
Sep 19 Python
Django开发中复选框用法示例
Mar 20 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
Feb 07 Python
python爬虫scrapy框架之增量式爬虫的示例代码
Feb 26 Python
Python 读写 Matlab Mat 格式数据的操作
May 19 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关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
关于numpy数组轴的使用详解
2019/12/05 Python
python输出pdf文档的实例
2020/02/13 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
学习python需要有编程基础吗
2020/06/02 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
团队队名口号大全
2014/06/06 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
合同纠纷调解书
2015/05/20 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python