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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python任务调度实例分析
May 19 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python 查找字符在字符串中的位置实例
May 02 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
对python中类的继承与方法重写介绍
Jan 20 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
Python3 JSON编码解码方法详解
Sep 06 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
tensorflow使用指定gpu的方法
Feb 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脚本的10个技巧(8)
2006/10/09 PHP
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
Python实现打印实心和空心菱形
2019/11/23 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
经理管理专业自荐信范文
2013/12/31 职场文书
电子商务自荐书范文
2014/01/04 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
七年级生物教学反思
2016/02/20 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏