2013-01-23 33 views
9

में यूपीएनपी के माध्यम से एक बंदरगाह अग्रेषित करें मैं एक पायथन एप्लिकेशन बना रहा हूं जिसके लिए उपयोगकर्ता को किसी सर्वर या किसी अन्य उपयोगकर्ता के साथ संवाद करने के लिए अपने कंप्यूटर पर पोर्ट को अग्रेषित करने की आवश्यकता होती है। वर्तमान कार्यान्वयन काफी अच्छा काम करता है, फिर भी एकमात्र चीज यह है कि फ़ाइल चलाने वाले व्यक्ति को पोर्ट को स्थानीय आईपी में मैन्युअल रूप से अग्रेषित करना होगा। मैं इसे स्वचालित करना चाहता हूं। वह एक बंदरगाह चुनता है, स्क्रिप्ट चेक अगर इसे अग्रेषित किया जा सकता है, तो यह आगे बढ़ता है। यदि यह नहीं हो सकता है, तो यह क्रमशः त्रुटि को संभालता है।पायथन

मैंने कुछ पुस्तकालयों में देखा है जो दावा करते हैं कि वे इसे शुद्ध पायथन में कर सकते हैं (क्योंकि मुझे परिष्करण के बाद .exe [...] को संकलित करने की आवश्यकता होगी) लेकिन कुछ उपयोगी खोजने में कामयाब नहीं रहा। यदि आप मुझे पोर्ट को अग्रेषित करने और क्रमशः सफलता/असफल होने का प्रयास करने के तरीके पर एक कोड नमूना प्रदान कर सकते हैं, तो यह बहुत अच्छा होगा।

अपने समय के लिए अग्रिम धन्यवाद।

पुनश्च: यह अजगर 2.7.X कि मैं

+0

पी.एस .: एप्लिकेशन Mac पर विकसित किया जाएगा और बाद में एक Windows मशीन पर परीक्षण किया गया। यदि यह काम करता है, तो इसे सभी प्लेटफॉर्म पर संकलित और तैनात किया जाएगा। – DaKnOb

+0

मैं एक ही चीज़ को देख रहा था, दुर्भाग्य से मुझे केवल [ब्रासा] (http://stackoverflow.com/q/4742001/897968) और [MiniUPNP] (http://stackoverflow.com/a/10440556/897968) मिला अब तक ... निश्चित रूप से एक और वर्तमान/कॉम्पैक्ट/शुद्ध पायथन कार्यान्वयन होना चाहिए? किसी को? – FriendFX

+0

यहां क्रॉस-प्लेटफ़ॉर्म समाधान की तलाश है। –

उत्तर

0

लक्षित कर रहा हूं है ऐसा लगता है कि कुछ विकल्प हैं जैसे:

है

पाइथो का एक अच्छा उदाहरण है जीएनयूपीएनपी के लिए एन बाइंडिंग राउटर here पर बंदरगाहों को खोलने के लिए प्रयोग किया जा रहा है। उस उदाहरण में लीज समय 0 पर सेट है, जो असीमित है। Add_port की परिभाषा के लिए here देखें।

एक साधारण उदाहरण हो सकता है:

#! /usr/bin/python 
import gupnp.igd 
import glib 
from sys import stderr 

my_ip = YOUR_IP 

igd = gupnp.igd.Simple() 
igd.external_ip = None 

main = glib.MainLoop() 

def mep(igd, proto, eip, erip, port, localip, lport, msg): 
    if port == 80: 
     igd.external_ip = eip 
     main.quit() 

def emp(igd, err, proto, ep, lip, lp, msg): 
    print >> stderr, "ERR" 
    print >> stderr, err, proto, ep, lip, lp, msg 
    main.quit() 

igd.connect("mapped-external-port", mep) 
igd.connect("error-mapping-port", emp) 

#igd.add_port("PROTO", EXTERNAL_PORT, INTERNAL_IP, INTERNAL_PORT, LEASE_DURATION_IN_SECONDS, "NAME") 
igd.add_port("TCP", 80, my_ip, 8080, 86400, "web") 

main.run() 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^