Je cours un serveur HTTP en utilisant le cadre tordu. Est-ce que je peux "manuellement" lui demander de traiter une charge utile? Par exemple, si j'ai construit une trame Ethernet, puis-je demander au réacteur de twisted de le gérer comme s'il venait d'arriver sur ma carte réseau?Donner manuellement un paquet à traiter à la pile réseau torsadée (web)?
Répondre
Vous pouvez faire quelque chose comme ceci:
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()
et l'enregistrer comme simpleinjecter.py, si vous le faites alors (à partir de la ligne de commande):
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
il devrait fonctionner comme prévu, avec la demande du serveur nc sur le port 9000 est acheminée comme charge utile dans le serveur Web tordu, et la réponse revient comme prévu.
Les lignes clés se trouvent dans SomeClient.dataRecieved(). Vous aurez besoin d'un objet de transport avec les bonnes méthodes - dans l'exemple ci-dessus, je viens de voler l'objet de la connexion client. Si vous n'allez pas faire cela, j'imagine que vous devrez en créer un, car la pile voudra faire des choses comme call getPeer() dessus.
Quelle est la cas d'utilisation?
Peut-être que vous voulez créer votre propre à la base Datagram Protocol
, l'endroit où vous effectivement le protocole à mettre en œuvre l'analyse syntaxique et la manipulation, est la classe de DatagramProtocol. Cette classe sera généralement obtenue à partir de twisted.internet.protocol.DatagramProtocol. La plupart des gestionnaires de protocole héritent de de cette classe ou de l'un de ses enfants de commodité. La classe DatagramProtocol reçoit les datagrammes et peut les envoyer sur le réseau . Les datagrammes reçus incluent l'adresse à laquelle ils ont été envoyés , et lors de l'envoi de datagrammes, l'adresse à envoyer à doit être spécifiée.
Si vous souhaitez voir les transmissions au niveau du fil plutôt que de les injecter, installez et exécutez WireShark, the fantastic, free packet sniffer.
Le cas d'utilisation: J'ai une configuration de tunnel entre deux ordinateurs. Une machine exécute un serveur Web (torsadé). Quand cette machine reçoit un paquet sur le port TCP 80 au-dessus du tunnel, je voudrais avoir tordu ce paquet de processus (comme s'il était arrivé "normalement" via le NIC de la machine). Lorsque le serveur génère des réponses TCP/IP, je souhaite les renvoyer via le tunnel. –
Il est possible de configurer la redirection de port via un tunnel SSH. Au lieu d'une solution personnalisée, vous pouvez exécuter HAProxy ou similaire et l'avoir en avant les connexions à tordu sur l'autre ordinateur via le tunnel. –
- 1. La meilleure façon de tirer manuellement un haricot à ressort?
- 2. ouvrir un fichier réseau à partir d'une application web intranet
- 3. C# - Mapper un lecteur réseau à partir du service Web
- 4. envoyer des données à un ForeignKey manuellement?
- 5. Bundling PHP MySql avec Flex à donner à un client
- 6. Sûr, moyen efficace d'accéder à des données non alignées dans un paquet réseau à partir de C
- 7. Création d'un réseau d'objets sur la pile et tas
- 8. ILGenerator: Comment ajouter booléenne à la pile
- 9. Comment puis-je demander à Perl de donner un message d'avertissement lorsqu'un certain paquet/tag est importé?
- 10. Donner un sens à un diagramme de classes Rational Rose
- 11. JSF/ICEFaces prend très longtemps à donner la réponse
- 12. accès réseau partagé à
- 13. Cocoa-Bindings: Mettre à jour NSObjectController manuellement?
- 14. Comment ajouter manuellement des données à un DataGrid dans Silverlight
- 15. Comment mettre à jour un jointable dans CakePHP, manuellement
- 16. Comment commencer à traiter le courrier électronique lié à l'activité du site Web?
- 17. Comment donner une valeur initiale à un modèle
- 18. Donner une instance d'une classe un pointeur à une structure
- 19. configurer ip alias et route, traiter avec réseau indisponible
- 20. Bonne pile d'applications Web-book?
- 21. Comment la connexion à un site Web IIS utilisant Kerberos
- 22. Comment obtenir la pile de pile dans un appareil mobile?
- 23. Donner un chemin relatif à l'applet java param
- 24. traduire le paquet de données mainframe à un paquet XML dans .net
- 25. Essayer de créer un paquet SOAP qui ressemble à ceci:
- 26. Comment donner mon accès .ASHX à ConfigurationManager.ConnectionStrings?
- 27. Faire confiance à un ensemble situé sur un partage réseau
- 28. Comment transférer un paquet ssis de Dev à Prod?
- 29. Comment envoyer un paquet ARP à partir d'un programme C?
- 30. WCF REST: WebHost n'a pas réussi à traiter la demande
Une trame ethernet sera traitée à un niveau beaucoup plus bas que la torsion fonctionne, donc injecter que dans le flux du réseau n'a rien à voir avec torsadé. – Amok