我正在使用扭曲框架运行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/