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给文本创立向量空间模型的教程
Apr 23 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
在django admin中配置搜索域是一个外键时的处理方法
May 20 Python
Python使用re模块验证危险字符
May 21 Python
Python如何安装第三方模块
May 28 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
这样写python注释让代码更加的优雅
Jun 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
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP实现图片旋转效果实例代码
2014/10/01 PHP
php简单中奖算法(实例)
2017/08/15 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python实现倒计时的示例
2014/02/14 Python
python中sys.argv参数用法实例分析
2015/05/20 Python
利用python求相邻数的方法示例
2017/08/18 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
python 创建一维的0向量实例
2019/12/02 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
keras导入weights方式
2020/06/12 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
自荐信结尾
2013/10/27 职场文书
大学计划书范文800字
2014/08/14 职场文书
医院消毒隔离制度
2015/08/05 职场文书
校园广播稿范文
2015/08/19 职场文书