2009-12-09 5 views
7

Je souhaite que le serveur écoute le port UDP 162 (interruption SNMP), puis transfère ce trafic à plusieurs clients. Il est également important que l'adresse du port source & reste identique (spoofing d'adresse).Serveur de transfert/multiplexage de port Python

Je suppose que le meilleur outil pour cela serait Twisted ou Scapy ou peut-être prises de vanille, seulement je ne trouve rien dans la documentation pour l'usurpation d'identité sur les Twisted adresse source/forgeage.

Une solution pour cela?

Modifier: ajouté bounty, mybe une solution avec iptables?

Répondre

5

Je ne suis pas à l'aise avec le twisted ou le scapy, mais c'est assez simple avec les douilles en python vanille. Un avantage supplémentaire de cela est qu'il sera encore plus portable. Ce code fonctionne dans mes tests limités:

#!/usr/bin/python 
from socket import * 
bufsize = 1024 # Modify to suit your needs 
targetHost = "somehost.yourdomain.com" 
listenPort = 1123 

def forward(data, port): 
    print "Forwarding: '%s' from port %s" % (data, port) 
    sock = socket(AF_INET, SOCK_DGRAM) 
    sock.bind(("localhost", port)) # Bind to the port data came in on 
    sock.sendto(data, (targetHost, listenPort)) 

def listen(host, port): 
    listenSocket = socket(AF_INET, SOCK_DGRAM) 
    listenSocket.bind((host, port)) 
    while True: 
     data, addr = listenSocket.recvfrom(bufsize) 
     forward(data, addr[1]) # data and port 

listen("localhost", listenPort) 
+0

Une chose que j'oublie de mettre en première partie de la déclaration de question que j'ai besoin adresse source et le port du serveur d'origine (donc en fait besoin de serveur à l'adresse source fausse), peut socket faire cela? – Ib33X

+0

Non, non, ça ne peut pas. Je pense que le problème que vous essayez de résoudre ici pourrait être mieux résolu par certaines règles iptables. Pourquoi voulez-vous le faire avec python, exactement? – Benson

+0

Incidemment, je serais très surpris si vous pouvez forger des en-têtes de paquets avec tordu; Scapy est probablement votre meilleur pari. Je vais jeter un coup d'oeil et voir à quel point c'est dur. – Benson