我正在使用扭曲框架运行HTTP服务器。有什么办法可以“手动”要求它处理一些有效载荷?例如,如果我构建了一些以太网框架,是否可以让扭曲的电抗器来处理它,就像它刚到达我的网卡上一样?

最佳答案

您可以执行以下操作:

from twisted.web import server
from twisted.web.resource import Resource
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, ClientFactory

class SomeWebThing(Resource):
    def render_GET(self, request):
        return "hello\n"

class SomeClient(Protocol):
    def dataReceived(self, data):
        p = self.factory.site.buildProtocol(self.transport.addr)
        p.transport = self.transport
        p.dataReceived(data)

class SomeClientFactory(ClientFactory):
    protocol = SomeClient
    def __init__(self, site):
        self.site = site

if __name__ == '__main__':
    root = Resource()
    root.putChild('thing', SomeWebThing())
    site = server.Site(root)
    reactor.listenTCP(8000, site)

    factory = SomeClientFactory(site)
    reactor.connectTCP('localhost', 9000, factory)

    reactor.run()


然后将其保存为simpleinjecter.py(如果从命令行执行):

echo -e "GET /thing HTTP/1.1\r\n\r\n" | nc -l 9000  # runs a server, ready to send req to first client connection
python simpleinjecter.py


它应该可以按预期的方式工作,端口9000上的nc服务器的请求将作为有效负载转移到扭曲的Web服务器中,并且响应按预期返回。

关键行在SomeClient.dataRecieved()中。您将需要一个具有正确方法的传输对象-在上面的示例中,我只是从客户端连接中窃取了该对象。如果您不打算这样做,那么我想您将必须补上一个,因为堆栈将要在其上执行诸如调用getPeer()之类的操作。

关于python - 手动给扭曲的(网络)网络堆栈处理数据包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1546745/

10-10 23:50