c टरडम कैसे एक विशिष्ट बंदरगाह के लिए एक रॉ सॉकेट बाँध?




विश्व के प्रमुख बंदरगाह (2)

कच्चे (7) के लिए मैन पेज का कहना है:

एक कच्चा सॉकेट बाइंड (2) कॉल का उपयोग करके एक विशिष्ट स्थानीय पते के लिए बाध्य किया जा सकता है यदि यह निर्दिष्ट आईपी प्रोटोकॉल के साथ सभी पैकेटों को बाध्य नहीं किया गया है। इसके अलावा एक रॉ सॉकेट SO_BINDTODEVICE का उपयोग कर एक विशिष्ट नेटवर्क डिवाइस के लिए बाध्य किया जा सकता है; सॉकेट देखें (7)

संपादित करें: आप किसी विशिष्ट पोर्ट को एक कच्ची सॉकेट बाँध नहीं कर सकते क्योंकि "पोर्ट" टीसीपी और यूडीपी में एक अवधारणा है, आईपी नहीं है। उन तीन प्रोटोकॉल के लिए हैडर आरेख देखें और यह स्पष्ट हो जाना चाहिए: आप निम्न स्तर पर काम कर रहे हैं, जहां पोर्ट की अवधारणा ज्ञात नहीं है।

मैं वर्तमान में एक प्रोग्रामिंग असाइनमेंट पर काम कर रहा हूं। असाइनमेंट एक क्लाइंट, नेटवर्क एमुलेटर, और सर्वर को लागू करना है ग्राहक नेटवर्क एमुलेटर के लिए पैकेट भेजता है, और नेटवर्क एमुलेटर सर्वर से गुजरता है। उपाध्यक्ष इसके साथ ही लागू होता है असाइनमेंट के लिए शर्त यह है कि मैं केवल कच्चे सॉकेट्स का उपयोग कर सकता हूं। इसलिए मैं अपना स्वयं का आईपी और यूडीपी हेडर बनाऊंगा। मैंने अपने पैकेटों को वायरर्सहर्क के साथ परीक्षण किया है। वे सभी सही हैं और उचित प्रारूप में हैं (यह उन्हें ठीक से पढ़ता है)।

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

तो मेरा सवाल यह है कि क्या उनका एक विकल्प या कुछ ऐसा है जो मैं इसके लिए सेट कर सकता हूं? जहां कच्चे सॉकेट एक बंदरगाह से जुड़ा होगा? क्या मैंने कुछ स्पष्ट किया है?

आपके समय के लिए शुक्रिया।

-


मुझे लगता है कि आप अपने सॉफ्टवेयर में पैकेट को फ़िल्टर करने की उम्मीद कर रहे हैं। ऐसा लगता है कि व्यायाम को जानने के लिए है कि आईपी स्टैक के विभिन्न घटकों को उपयोगकर्ता स्थान में सरलीकृत टुकड़ा बनाने के द्वारा क्या किया जाता है। आमतौर पर कर्नेल में, आईपी कोड सभी पैकेटों को संसाधित करेगा, आईपी हेडर को सत्यापित करेगा, टुकड़े फिर से इकट्ठा करेगा, और प्रोटोकॉल फ़ील्ड की जांच करेगा। यदि प्रोटोकॉल फ़ील्ड 17 (udp) है, तो वह इसे यूडीपी कोड (प्रत्येक यूडीपी पैकेट) के पास भेज देता है। यह यूडीपी कोड के लिए है, तो यूडीपी शीर्षलेख को मान्य करें और निर्धारित करें कि क्या किसी भी एप्लिकेशन को गंतव्य पोर्ट के आधार पर रुचि है या नहीं।

मुझे लगता है कि आपकी प्रोजेक्ट को इस प्रक्रिया की नकल करने के लिए अपेक्षाकृत कम या अपेक्षा की जाती है। जाहिर है इसमें से कोई भी कर्नेल में ऐसा करने के लिए उतना ही कुशल नहीं होगा, लेकिन जब से यूजर-स्पेस में आईपी स्टैक लिखना (असाइनमेंट) है, तो मुझे लगता था कि व्यायाम व्यायाम का मतलब नहीं है







raw-sockets