这是我到目前为止想出的一些代码......
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/