python - 扭曲的端口转发代理将数据发送回客户端

标签 python proxy twisted

这是我到目前为止想出的一些代码......

   from twisted.internet import protocol,reactor
   from twisted.internet.protocol import Protocol,ClientFactory

   class serverprotocol(Protocol):

       def dataReceived(self,data):
            print "[+] got \n" + data
            factory = protocol.ClientFactory()
            factory.protocol = Clientp
            global xx
            xx=data
            print xx
            reactor.connectTCP("127.0.0.1",80,factory)

   class Clientp(Protocol):
       def connectionMade(self):
            print "sending " + xx
            self.transport.write(xx)

       def dataReceived(self,data):
            print "+ got reply" + data

   factory = protocol.ServerFactory()
   factory.protocol = serverprotocol
   reactor.listenTCP(3333, factory)
   reactor.run()

我想知道如何将客户端类中收到的数据发送回客户端 连接到端口 3333。

如果有更好的编码方式,请告诉我。

最佳答案

这是一个扭曲的常见问题解答:"How do I make input on one connection result in output on another"?

但这并不是真正的 Twisted 问题。它更像是一个基本的 Python 编程问题。

您要问的是,给定类 Clientp,您如何将参数传递给它,以便它知道以后要做什么?

答案很简单“给它一个__init__,给它传递一个参数”

from twisted.internet.protocol import Protocol, Factory
from twisted.internet.endpoints import TCP4ClientEndpoint
from twisted.internet import reactor

class serverprotocol(Protocol):

    def dataReceived(self,data):
        print "[+] got \n" + data
        def clientProtocol():
            return Clientp(data)
        endpoint = TCP4ClientEndpoint(reactor, "127.0.0.1", 80)
        endpoint.connect(Factory.forProtocol(clientProtocol))

class Clientp(Protocol):
    def __init__(self, dataToSend):
        self.dataToSend = dataToSend

    def connectionMade(self):
        self.transport.write(self.dataToSend)

    def dataReceived(self,data):
        print "+ got reply" + data

reactor.listenTCP(3333,
                  Factory.forProtocol(serverprotocol))
reactor.run()

如果您想要一个完整的端口转发器,您可以简单地使用twistd portforward 或查看twisted.protocols.portforward 中的代码。 .

关于python - 扭曲的端口转发代理将数据发送回客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23820286/

相关文章:

javascript - 抓取 JavaScript :void(0) content using python

c - libuv : src port of response not same as port on which process is listening

elasticsearch - 无法连接到我的代理 elasticsearch 节点

C# - 端口扫描器

python - 扭曲的 16 线接收器 : No callbacks fired

sql - 扭曲的adbapi : number affected rows and last insert id

python - 如何检查列是否包含 pandas 中的字符串

python - 带有 Matlab 内核的 Jupyter Notebook

python - 仅从 Xpath 中获取一部分文本

c# - 没有代理的低下载速度