2012-12-15 12 views
11

मैं वर्तमान में मैक ओएस पहाड़ शेर पर एक टीसीपी सर्वर बनाने के लिए एक परियोजना पर काम कर रहा हूं। इस अजगर स्क्रिप्ट के भीतर Server.pytwisted.internet.error.CannotListen त्रुटि: किसी भी पर नहीं सुन सका: 80: [Errno 13] अनुमति अस्वीकार

, जिन्हें आप नीचे मैं मुड़ इस्तेमाल किया पोर्ट 80 पर सुनने के लिए:: मैं एक स्क्रिप्ट बुलाया लिखा था

reactor.listenTCP(80, factory) 
reactor.run() 

जैसे कैसे कभी मैं हो रही त्रुटियों:

File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/posixbase.py", line 436, in listenTCP 
    p.startListening() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/tcp.py", line 641, in startListening 
    raise CannotListenError, (self.interface, self.port, le) 
twisted.internet.error.CannotListenError: Couldn't listen on any:80: [Errno 13] Permission denied. 

मुझे लगता है कि ऐसा इसलिए है क्योंकि tcp.py स्क्रिप्ट में व्यवस्थापक उपयोगकर्ता के लिए गलत अनुमति है? या पोर्ट < 1024 पर अनुमति सेट करने का कोई तरीका है? (अनुमति बदलने के लिए, यह इस तरह के सर्वर की सुरक्षा को कैसे प्रभावित करेगा?)

किसी भी बेहतर समाधान की सराहना की जाती है।

उत्तर

9

मैंने आपके सर्वर को शुरू करने के लिए कमांड sudo + का उपयोग करके इस समस्या को हल किया।

+1

मेरे लिए सहायता करें। लेकिन क्या आप कृपया बता सकते हैं कि हमें शुरू करने पर "सुडो" क्यों चाहिए? – iPatel

+1

ओएस में, डिफ़ॉल्ट रूप से कुछ क्रियाएं केवल प्रशासकों द्वारा अनुमत होती हैं। कमांड से पहले "सुडो" डालकर उपयोगकर्ता प्रमाण-पत्र प्रदान करना मूल रूप से मतलब है कि आप इस तरह की कार्रवाई को अधिकृत कर रहे हैं। एक सर्वर शुरू करने का मतलब इंटरनेट तक पहुंच की इजाजत है जो सुरक्षा खतरे को लागू कर सकती है, इसलिए यह समझ में आता है कि इस मशीन के केवल व्यवस्थापक को ऐसा करने की अनुमति है। – shorttermmem

+0

मेरे ज्ञान को बेहतर बनाने के लिए धन्यवाद। – iPatel

5

ऐसा लगता है जैसे आप सही रास्ते पर हैं। सम्मेलन, केवल एक सुपर उपयोगकर्ता (या, कुछ नए सिस्टम में, जो कुछ विशेष शक्तियां प्रदान की गई है एक सामान्य उपयोगकर्ता) नीचे 1024

authbind उपकरण बंदरगाहों के लिए बाध्य करने के लिए अनुमति दी है इस अनुदान के लिए एक आसान तरीका है गैर-सुपर-उपयोगकर्ताओं को विशेषाधिकार। ऐसा लगता है कि ओएस एक्स पोर्ट, https://github.com/Castaglia/MacOSX-authbind (हालांकि मैंने कभी लिनक्स पर ही ऑथबिंड का उपयोग किया है)।

एक और तरीका यह है कि लॉन्च करने के लिए बंदरगाह बांधें और इसे अपने मुड़ वाले कार्यक्रम में सौंप दें। यह दृष्टिकोण ओएस एक्स पर लोगों को जो कुछ मिल रहा है, उससे अधिक विशिष्ट है, और इसका उपयोग पूरा किया जाता है (काफी हाल ही में पेश किया गया) IReactorSocket.adoptStreamPort एपीआई। इसे कॉन्फ़िगर करने के तरीके के बारे में विवरण के लिए लॉन्च किए गए दस्तावेज़ देखें और कैसे आपका ट्विस्ट प्रोग्राम सीख जाएगा कि सॉकेट इसे कब अपनाना है।

+0

twisted.internet.error.CannotListenError: किसी भी पर सुनने नहीं किया जा सका: 80: [errno 48] पहले से प्रयोग में पता। क्या आपने कभी ऐसी त्रुटि अनुभव की है। फोरम पर अधिकांश पोस्टों के लिए, [एर्र्नो 98] को बहुत शिकायत की गई है, लेकिन 48 नहीं। मैंने इस पोर्ट 80 को बाध्यकारी चल रही प्रक्रियाओं की जांच करने के लिए "lsof -i: 80" का उपयोग किया था, फिर वेब सहित सभी को मार डाला "सुडो मार पीआईडी" का उपयोग कर ब्राउज़र। हालांकि, समस्या बनी हुई है। मैं अब इतना उलझन में हूँ। – shorttermmem

+1

पोर्ट के उपयोग में संभव है, भले ही कोई प्रोग्राम वर्तमान में इस पर न सुन रहा हो। इस कार्यक्रम को सुनने के दो मिनट बाद तक (या अन्यथा सुनवाई सॉकेट बंद कर दिया गया है), टीसीपी कनेक्शन TIME_WAIT स्थिति में रह सकते हैं। ये बंदरगाह पर सुनने से एक नई सॉकेट को रोकते हैं। हालांकि, इस समस्या से बचने के लिए ट्विस्ट बीएसडी सॉकेट एपीआई की SO_REUSEADDR सुविधा का उपयोग करता है। –

+1

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

21

बस टर्मिनल पर जाएं और sudo python server.py टाइप करें। अब यह पासवर्ड पूछेगा, अपना पासवर्ड टाइप करें। आपकी समस्या हल हो जाएगी। हैप्पी कोडिंग

+1

मेरे लिए मदद करें। लेकिन क्या आप कृपया बता सकते हैं कि हमें शुरू करने पर "सुडो" क्यों चाहिए? – iPatel

2

हो सकता है कि आपका टीसीपी 46 आपके 80 का उपयोग कर रहा हो। अपने अपाचे को बंद करें, सब ठीक हो जाएगा।

sudo apachectl रोक

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