返回顶部
首页 > 资讯 > 后端开发 > Python >python socks5 proxy实
  • 418
分享到

python socks5 proxy实

pythonproxy 2023-01-31 05:01:50 418人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

zz Http://www.ietf.org/rfc/rfc1928.txt  http://www.ietf.org/rfc/rfc1929.txt import Socket, sys, select, SocketServ

zz Http://www.ietf.org/rfc/rfc1928.txt

 http://www.ietf.org/rfc/rfc1929.txt

import Socket, sys, select, SocketServer, struct, time
class ThreadingtcpServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): pass
class Socks5Server(SocketServer.StreamRequestHandler):
    passdct = {"123":"456"};
    iplist = ['127.0.0.1'];
    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 auth_user_pass(self, user, passwd):
        dic = self.__class__.passdct
        return dic.has_key(user) and passwd == self.__class__.passdct[user];

                
    def handle(self):
        try:
            print 'socks connection from ', self.client_address, self.__class__.iplist
            sock = self.connection
            # 1. Version
            data = sock.recv(262) # no auth, \x05\x01\x00
                                  # user/passwd auth, \x05\x03\x00\x03\x02


            if self.client_address[0] in self.__class__.iplist:
                reply = b"\x05\x00"   # no auth and ok
            else:
                reply = b"\x05\xff"
            
            if len(data) == 5:
                sock.send(b"\x05\x02");
                # 2. append user/passwd
                data = self.rfile.read(2)
                username = self.rfile.read(ord(data[1]))
                passwd = self.rfile.read(ord(sock.recv(1)[0]))
                # auth it
                if self.auth_user_pass(username, passwd):
                    reply = b"\x01\x00"
                else:
                    reply = b"\x01\x01"

            sock.send(reply);
            
            # 3. 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 = b"\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]))
                    print 'Tcp connect to', addr, port[0]
                else:
                    reply = b"\x05\x07\x00\x01" # Command not supported
                local = remote.getsockname()
                print "reply addr:", local
                reply += socket.inet_aton(local[0]) + struct.pack(">H", local[1])
                sys.stdout.flush()
                
            except socket.error:
                # Connection refused
                reply = '\x05\x05\x00\x01\x00\x00\x00\x00\x00\x00'
            sock.send(reply)
            # 4. Transfering
            if reply[1] == '\x00':  # Success
                if mode == 1:    # 1. Tcp connect
                    self.handle_tcp(sock, remote)
        except socket.error:
            print 'socket error'

def main():
    server = ThreadingTCPServer(('', 1080), Socks5Server)
    server.serve_forever()
if __name__ == '__main__':
    main()



--结束END--

本文标题: python socks5 proxy实

本文链接: https://lsjlt.com/news/188225.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python socks5 proxy实
    zz http://www.ietf.org/rfc/rfc1928.txt  http://www.ietf.org/rfc/rfc1929.txt import socket, sys, select, SocketServ...
    99+
    2023-01-31
    python proxy
  • 简单实现Socks5代理(Python&
    只实现了CONNECT功能 参考:点击打开链接 Python版: import socket import threading import select import time IsNeedAuth=False Username=...
    99+
    2023-01-31
    简单 Python
  • python 使用socks5 设置全局代理
    要设置全局代理,可以使用 `socks` 库来实现。下面是一个示例代码,可以将全局代理设置为 SOCKS5 代理:```python...
    99+
    2023-09-16
    python
  • 怎么实现socks5全局代理
    要实现Socks5全局代理,你可以按照以下步骤进行操作:1. 首先,你需要一个Socks5代理服务器。你可以使用开源的Socks5服...
    99+
    2023-08-19
    socks5
  • 如何实现socks5全局代理
    要实现socks5全局代理,需要进行以下步骤:1. 安装socks5服务器:首先需要在你的服务器或者本地机器上搭建一个socks5服...
    99+
    2023-08-18
    socks5
  • MySQL5.7--------proxy实现rols管理
    1. 背景   * 角色的概念管理数据库访问权限。 根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户。 角色可以拥有数据库对象(比如,表)以及可以把...
    99+
    2024-04-02
  • Proxy使用实例分析
    这篇文章主要讲解了“Proxy使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Proxy使用实例分析”吧!了解代理模式一个例子作为一个单身钢铁直男程序员,小王最近逐渐喜欢上了前端小...
    99+
    2023-06-27
  • vue3简易实现proxy代理实例详解
    vue3 简易实现proxy代理 1.基础数据 const state = reactive({ name: 'cld', age: 26, like: 'paint' }); co...
    99+
    2024-04-02
  • 使用mysql-proxy实现读写分离
    mysql-proxy实现MySQL读写分离 使用二进制格式的mysql-proxy的安装配置 mysql-proxy本身并不能进行读写分离,要实现读写分离要依赖于lua,所以要先查看是否安装了lua,...
    99+
    2024-04-02
  • mysql-proxy实现读写分离脚本
    将以下脚本保存为/etc/init.d/mysql-proxy ,赋予权限chmod 755 /etc/init.d/mysql-proxy#!/bin/bash # # mysql-proxy&...
    99+
    2024-04-02
  • 使用ShardingSphere-Proxy实现分表分库
    目录1. 环境准备2. 数据库脚本准备3. 配置 ShardingSphere-Proxy分表原理解析参考:Sharding-Proxy的基本功能使用 1. 环境准备 MySql 5...
    99+
    2024-04-02
  • java proxy动态代理怎么实现
    在Java中,可以通过使用`java.lang.reflect.Proxy`类来实现动态代理。首先,需要定义一个接口,代表被代理类和...
    99+
    2023-09-09
    java
  • 实例详解vue中的代理proxy
    目录问题复习一下跨域的解决方案原理场景扩展几个常用的devServer配置扩展几个vue/cli3的配置问题 我们本地调试一般都是 npm run serve,然后打开 本机ip:8...
    99+
    2023-02-17
    vue代理proxy vue代理
  • mysql 基于mysql-proxy实现读写分离
    mysql 读写分离 读写分离首先不推荐使用,很多业务场景也没有必要,不仅增加技术复杂度,而且可能会导致读到落后的数据,建议优化数据库,推荐使用keepalive+mysql双主复制的方案 然后mysql-proxy是官方推出的中间件,不仅...
    99+
    2015-08-29
    mysql 基于mysql-proxy实现读写分离 数据库入门 数据库基础教程 数据库 mysql
  • 安装mysql-proxy实现mysql读写分离
    一. 环境描述操作系统版本:centos 7.2主服务器:192.168.0.72  node2从服务器:192.168.0.73  node3调度服务器MySQL-Proxy...
    99+
    2024-04-02
  • Golang实现gRPC的Proxy的原理解析
    背景 gRPC是Google开始的一个RPC服务框架, 是英文全名为Google Remote Procedure Call的简称。 广泛的应用在有RPC场景的业务系统中,一些架构中...
    99+
    2024-04-02
  • ES6中Proxy与Reflect怎么实现重载
    这篇文章主要介绍“ES6中Proxy与Reflect怎么实现重载”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ES6中Proxy与Reflect怎么实现重载”文章能帮助大家解决问题。Proxy与Re...
    99+
    2023-06-17
  • 使用mysql-proxy实现mysql的读写分离
    TEST ...
    99+
    2024-04-02
  • proxy实现vue3数据双向绑定原理
    目录一、proxy对比Object.defineProperty的优点二、、proxy监听对象的简单实现1.代理对象简单实现2.补充知识 Reflect3.proxy方法三、手写vu...
    99+
    2024-04-02
  • proxy怎么实现数据的双向绑定
    本篇内容介绍了“proxy怎么实现数据的双向绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在前面随着 vue3.x 的消息越来越多,p...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作