我正在尝试制作支持不同类型代理的简单负载均衡器。
from twisted.internet.protocol import Factory
from twisted.protocols.portforward import ProxyFactory
from twisted.internet import reactor
from enum import Enum
import random
class BalancerType(Enum):
SOCKS5 = 'SOCKS5'
HTTP = 'HTTP'
class BalancerFactory(Factory):
def __init__(self, type):
self.type = type
self.proxy_factories = [ProxyFactory('127.0.0.1', 20000), ProxyFactory('127.0.0.1', 30000)]
def buildProtocol(self, addr):
proxy_factory = random.choice(self.proxy_factories)
print 'using proxy %s:%s' % (proxy_factory.host, proxy_factory.port)
return proxy_factory.buildProtocol(addr)
reactor.listenTCP(interface = '127.0.0.1', port = 10000, factory = BalancerFactory(BalancerType.SOCKS5))
reactor.run()
balancer侦听127.0.0.1:10000并随机将http请求分发到代理服务器127.0.0.1:20000,127.0.0.1:30000。 当我将Web浏览器配置为使用socks代理并且我在balancer中的所有代理都是socks代理时,一切正常。
但我需要支持不同类型的代理,例如127.0.0.1:20000的socks5代理和127.0.0.1:30000的http代理。
我认为如果平衡器类型和代理类型不同,我需要一些额外的工厂来包装连接。
我试图找到一些支持扭曲的袜子5库。 txsocksx 看起来很棒,但所有示例都使用端点,我不知道如何在我的BalancerFactory中使用它。