मान्य प्रॉक्सी पता हाथ से लिखे SOCKS संदेश को मान्य नहीं बनाता। C या C++ struct भेजने से ऐसा पैडिंग या होस्ट-क्रम के पूर्णांक भेजे जा सकते हैं जो प्रोटोकॉल ने कभी नहीं माँगे।

SOCKS5 डोमेन-नाम CONNECT अनुरोध के लिए, विधि वार्ता और चुने गए किसी भी प्रमाणीकरण के बाद इस क्रम को स्पष्ट रूप से सीरियलाइज़ करें:

  1. संस्करण, कमांड, आरक्षित बाइट और पता प्रकार
  2. डोमेन लंबाई और डोमेन बाइट्स
  3. नेटवर्क बाइट क्रम में दो-बाइट गंतव्य पोर्ट

पता लंबाइयाँ SOCKS संस्करण और पता प्रकार पर निर्भर करती हैं। निश्चित चौड़ाई के संख्यात्मक फ़ील्ड को उनका निर्दिष्ट निरूपण चाहिए; डोमेन स्ट्रिंग का अपना लंबाई एन्कोडिंग होता है। C स्ट्रिंग टर्मिनेटर वायर संदेश में शून्य जोड़ने का सामान्य निर्देश नहीं है।

कार्यान्वयन शॉर्टकटजाँचने योग्य समस्या
8-बिट पॉइंटर के माध्यम से 32-बिट मान असाइन करनायह चारों बाइट नहीं निकालता
बफ़र को बड़े पूर्णांक पॉइंटर में कास्ट करनासंरेखण और बाइट क्रम अभी भी संभालना होगा
यह मानना कि एक पढ़ना या लिखना एक संदेश हैTCP प्रोटोकॉल क्रम का केवल एक भाग स्थानांतरित कर सकता है

प्रत्येक फ़ील्ड की तुलना इच्छित गंतव्य से करें और आंशिक I/O संभालें। दो बाइट मिलने से यह सिद्ध नहीं होता कि पूरा उत्तर आ गया। इन सीमाओं की जाँच विकृत अनुरोध को सही ढंग से वर्णित कनेक्शन अस्वीकार करने वाले सर्वर से अलग कर सकती है।

संबंधित लेख