ansi c

2008-10-03 13 views
8

में पोर्ट 80 को सॉकेट बाध्य करना जब मैं सी में सॉकेट में पोर्ट 80 को बांधने का प्रयास करता हूं, तो मुझे हमेशा त्रुटि मिलती है, कि मुझे इस पोर्ट का उपयोग करने की अनुमति नहीं है। क्या इस अनुमति को पाने का कोई आसान तरीका है?ansi c

उत्तर

17

आमतौर पर केवल सुपरसुर (रूट) 'विशेषाधिकार प्राप्त' बंदरगाहों से बंधे जा सकते हैं (यानी 1024 से नीचे वाले पोर्ट नंबर)।

इसका मतलब है कि आपको या तो अपने प्रोग्राम को रूट के रूप में चलाने या अपने निष्पादन योग्य 'सूड रूट' बनाना है।

इनमें से दोनों के पास सुरक्षा परिणाम हैं ताकि आप सूड दृष्टिकोण का उपयोग करने और बाध्य कॉल किए जाने के बाद सुपरसुर विशेषाधिकारों को छोड़ने पर विचार करना चाहें।

+0

बंदरगाहों 1024 और नीचे पोर्ट्स को वास्तव में "विशेषाधिकार प्राप्त बंदरगाह" नहीं कहा जाता है, "सुरक्षित बंदरगाह" नहीं, 1024 से ऊपर की सभी चीजें "क्षणिक बंदरगाह" हैं। चीयर्स। – paxos1977

0

यदि आप किसी साझा सिस्टम (विश्वविद्यालय कंप्यूटर की तरह) पर हैं और रूट नहीं हैं तो डिज़ाइन द्वारा उस अनुमति को पाने का कोई आसान तरीका नहीं है।

4

आपको this tutorial सी/सी ++ के साथ नेटवर्क प्रोग्रामिंग पर बहुत उपयोगी मिलेगा।

और, वैसे, ANSI C नेटवर्क तक पहुंचने का कोई तरीका नहीं है। यह ओएस आपूर्ति पुस्तकालयों (बीएसडी सॉकेट एपीआई, विंडोज़ को winsock के रूप में भी पोर्ट किया गया है) जो इस क्षमता को प्रदान करता है।

+0

सॉकेट के लिए बीज की मार्गदर्शिका है जो मैंने अन्य कंप्यूटर विज्ञान छात्रों की पीढ़ियों के साथ विश्वविद्यालय में सॉकेट प्रोग्रामिंग को सीखा है। ये सचमुच अच्छा है। इसके अलावा, डब्ल्यू रिचर्ड स्टीवंस के काम इस जगह में एक अच्छा ट्यूटोरियल हैं। – ConcernedOfTunbridgeWells

+0

हां, हालांकि स्टीवन के बाइबल की तुलना में बीज के ट्यूटोरियल पढ़ने में काफी कम समय लगता है :-) –

0

यह @Charles बेली कहते हैं बस के रूप में ... और मुझे जोड़ने के लिए है कि यही कारण है कि एक http://some.urlके रूप में URL के पोर्ट विनिर्देश द्वारा 8080 पर http सर्वर पते को देखने के लिए प्रयोग किया जाता है चाहते हैं: 8080/

3

बंदरगाहों 1024 और नीचे के तहत बंदरगाहों के लिए सॉकेट बाँध विशेषाधिकृत बंदरगाहों कहा जाता है कर सकते हैं, इन बंदरगाहों के लिए बाध्य ऊंचा अनुमति की आवश्यकता है।

1024 से ऊपर के बंदरगाहों को एम्फेमेरल पोर्ट कहा जाता है। इनके लिए बाध्यकारी कोई विशेष अनुमति की आवश्यकता नहीं है।

निजीकृत बंदरगाहों तक पहुंच प्राप्त करने का सबसे आसान तरीका रूट उपयोगकर्ता होना है।

-3

हां, आप आसानी से पोर्ट 80 से बांध सकते हैं। अपाचे का उपयोग करें। एक वेब एप्लिकेशन लिखें। अपाचे पोर्ट 80 पर बांधता है और आपका वेब एप्लिकेशन चलाता है।

क्या आप अगले अपाचे लिखने की कोशिश कर रहे हैं? यदि ऐसा है, तो आपको अपने ऑपरेटिंग सिस्टम में setuid एपीआई कॉल के बारे में जानना होगा।

यदि आप अपाचे का एक नया संस्करण नहीं लिख रहे हैं, तो अधिकांश लोग एक गैर-विशेषाधिकृत बंदरगाह का उपयोग करते हैं। 8000 लोकप्रिय है, इसलिए 8080 है।

0

एसएलॉट के जवाब से बहुत नकारात्मक प्रतिक्रियाएं हो सकती हैं लेकिन उनका विचार बेवकूफ से बहुत दूर है: यदि मूल प्रश्न वास्तविक कार्यक्रम (स्कूल असाइनमेंट नहीं) के लिए है, तो इसे विकसित करना एक HTTP सर्वर के पीछे आवेदन अक्सर एक उचित विकल्प है। इस तरह, आप एक अच्छे और अच्छी तरह से डीबग किए गए प्रोग्राम, अपाचे में बहुत कम स्तर के विवरण छोड़ सकते हैं।

एप्लिकेशन को सीजीआई नहीं होना चाहिए, यह अपाचे मॉड्यूल हो सकता है। संस्करण 2 से अपाचे, अब सिर्फ एक HTTP सर्वर नहीं है। यह अब नेटवर्क कार्यक्रमों को विकसित करने के लिए एक मंच है। एक अपाचे मॉड्यूल लिखना मूल प्रश्न का सही उत्तर हो सकता है (Apache documentation देखें)

+0

धन्यवाद। मुझे सीखने के लिए थोड़ी देर लग गई * क्यों * विशेषाधिकार प्राप्त बंदरगाह हैं। इसे उम्मीदों के साथ करना है - आप पोर्ट 80 पर http प्रोटोकॉल की अपेक्षा करते हैं, और आपके लिए उस प्रोटोकॉल को संभालने के लिए पहले से ही सॉफ्टवेयर का एक अच्छा टुकड़ा है। –

0

सामान्य प्रोग्राम 1024 से नीचे वाले "विशेषाधिकार प्राप्त" बंदरगाहों को बाध्य नहीं कर सकते हैं।यह यूनिक्स जैसी ऑपरेटिंग सिस्टम की एक अप्रचलित सुरक्षा सुविधा है।

एक सुपरसियर के रूप में चल रहा है, हालांकि यहां कई अन्य लोगों द्वारा सुझाया गया है, इस समस्या का एक बुरा समाधान है। यदि आप डेबियन या उबंटू सिस्टम पर चल रहे हैं, तो मैं authbind पैकेज स्थापित करने का सुझाव देता हूं, जो आपको अपने कार्यक्रम को किसी अन्य विशेष अनुमति देने के बिना विशेषाधिकार प्राप्त बंदरगाहों को खोलने की अनुमति देगा।

आप किसी भी अन्य सिस्टम पर चला रहे हैं, मैं डेबियन या ubuntu स्थापित करने का सुझाव देते हैं ;-)।