2009-12-09 9 views
7

मैं सर्वर बनाना चाहता हूं जो यूडीपी पोर्ट 162 (एसएनएमपी जाल) पर सुनें और फिर इस ट्रैफ़िक को कई क्लाइंट्स पर आगे बढ़ाएं। यह भी महत्वपूर्ण है कि स्रोत पोर्ट & पता वही रहता है (पता स्पूफ़िंग)।पायथन पोर्ट अग्रेषण/मल्टीप्लेक्सिंग सर्वर

मुझे लगता है कि इसके लिए सबसे अच्छा उपकरण Twisted या Scapy या हो सकता है वेनिला सॉकेट, केवल मैं स्रोत पता स्पूफिंग/फोर्जिंग के बारे में मुड़ के लिए दस्तावेज में कुछ भी नहीं मिला होगा।

इसके लिए कोई समाधान?

संपादित करें: जोड़ा गया बाउंटी, mybe iptables के साथ कोई समाधान?

उत्तर

5

मैं मुड़ या घबराहट से सहज नहीं हूं, लेकिन यह वेनिला पायथन सॉकेट के साथ ऐसा करने के लिए काफी सरल है। इसका एक अतिरिक्त लाभ यह है कि यह और भी पोर्टेबल होगा। इस कोड को मेरी सीमित परीक्षण में काम करता है:

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

एक बात मैं सवाल बयान है कि मैं सर्वर होने वाले से स्रोत पता और पोर्ट की जरूरत के पहले भाग में डाल करने के लिए भूल जाते हैं (ताकि वास्तव में सर्वर नकली स्रोत पता करने की जरूरत है), सॉकेट कर सकते हैं इस करते हैं? – Ib33X

+0

नहीं, नहीं, यह नहीं कर सकता। मुझे लगता है कि जिस समस्या को आप हल करने का प्रयास कर रहे हैं, वह कुछ iptables नियमों द्वारा बेहतर हल किया जा सकता है। आप इसे पाइथन के साथ क्यों करना चाहते हैं, बिल्कुल? – Benson

+0

संयोग से, अगर आप पैकेट हेडर को मोड़ के साथ फोर्ज कर सकते हैं तो मुझे आश्चर्य होगा; स्कैपी शायद आपकी सबसे अच्छी शर्त है। मैं एक नज़र रखूंगा और देख सकता हूं कि यह कितना मुश्किल है। – Benson

0

बंदरगाहों, नहीं बहुसंकेतन अग्रेषण करने के लिए एक अलग लेकिन एक तरह से संबंधित समाधान (विशिष्ट सवाल का जवाब नहीं है, लेकिन उम्मीद है कि संबंधित लोगों से मेल खाते हैं - यह मैं के लिए कम से कम क्या देख रहा था है) :

http://www.linux-support.com/cms/forward-network-connections-with-python/