2009-12-09 41 views
7

UDP bağlantı noktasını 162 (SNMP trap) dinleyen ve sonra bu trafiği birden çok istemciye ileten bir sunucu yapmak istiyorum. Ayrıca önemli olan, kaynak bağlantı noktası & adresinin aynı kalmasıdır (adres sahteciliği).Python bağlantı noktası iletme/çoğullama sunucusu

Bunun için en iyi araç Twisted veya Scapy ya da belki vanilya prizler, sadece ben kaynak adresi sızdırma/dövme hakkında Twisted belgelerinde şey bulamıyorum olacağını tahmin ediyorum.

Bunun için herhangi bir çözüm var mı?

Düzenleme: iptables ile mybe herhangi bir çözüm ekledi;

cevap

5

Bükülmüş veya scapy ile rahat değilim, ancak bunu vanilya python soketleri ile yapmak oldukça basit. Bunun bir avantajı daha da taşınabilir olacak olmasıdır. Bu kod benim sınırlı testlerde çalışır:

#!/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

bir şey, soket olabilir bunu (yani aslında sunucu sahte kaynak adresi gerekir)? – Ib33X

+0

Hayır, yapamaz. Burada çözmeye çalıştığınız sorunun bazı iptables kurallarıyla daha iyi çözülebileceğini düşünüyorum. Neden tam olarak python ile yapmak istiyorsun? – Benson

+0

Tesadüfen, paket başlıklarını bükülmüş olarak değiştirebilirseniz çok şaşırırım; scapy muhtemelen en iyi bahistir. Bakacağım ve ne kadar zor olduğunu göreceğim. – Benson

İlgili konular