C struct ले खराब SOCKS अनुरोध किन उत्पादन गर्न सक्छ
कम्पाइलर लेआउटलाई वायर ढाँचा मान्नुको सट्टा स्पष्ट फिल्ड चौडाइ, बाइट क्रम र स्ट्रिम I/O जाँच्नुहोस्।
मान्य प्रोक्सी ठेगानाले हातले लेखिएको SOCKS सन्देशलाई मान्य बनाउँदैन। C वा C++ struct पठाउँदा प्रोटोकलले कहिल्यै नमागेको प्याडिङ वा होस्ट-क्रमका पूर्णाङ्कहरू पठाउन सक्छ।
SOCKS5 डोमेन-नाम CONNECT अनुरोधका लागि, विधि वार्ता र छानिएको कुनै पनि प्रमाणीकरणपछि यो क्रम स्पष्ट रूपमा सिरियलाइज गर्नुहोस्:
- संस्करण, आदेश, आरक्षित बाइट र ठेगाना प्रकार
- डोमेन लम्बाइ र डोमेन बाइटहरू
- नेटवर्क बाइट क्रममा दुई-बाइट गन्तव्य पोर्ट
ठेगानाका लम्बाइहरू SOCKS संस्करण र ठेगाना प्रकारमा निर्भर गर्छन्। स्थिर चौडाइका सङ्ख्यात्मक फिल्डलाई तिनको निर्दिष्ट प्रतिनिधित्व चाहिन्छ; डोमेन स्ट्रिङको आफ्नै लम्बाइ इन्कोडिङ हुन्छ। C स्ट्रिङ टर्मिनेटर वायर सन्देशमा शून्य थप्ने सामान्य निर्देश होइन।
| कार्यान्वयनको छोटो बाटो | जाँच्नुपर्ने समस्या |
|---|---|
| 8-बिट पोइन्टरमार्फत 32-बिट मान तोक्ने | यसले चारै बाइट उत्सर्जन गर्दैन |
| बफरलाई ठूलो पूर्णाङ्क पोइन्टरमा कास्ट गर्ने | सन्तुलन र बाइट क्रम अझै व्यवस्थापन गर्नुपर्छ |
| एक पढाइ वा लेखाइ एक सन्देश हो भनी मान्ने | TCP ले प्रोटोकल क्रमको केही भाग मात्र स्थानान्तरण गर्न सक्छ |
प्रत्येक फिल्डलाई अभिप्रेत गन्तव्यसँग तुलना गर्नुहोस् र आंशिक I/O व्यवस्थापन गर्नुहोस्। दुई बाइट प्राप्त गर्दा पूरै जवाफ आइपुग्यो भन्ने प्रमाण हुँदैन। ती सीमाहरू जाँच्दा विकृत अनुरोधलाई सही रूपमा वर्णन गरिएको जडान अस्वीकार गर्ने सर्भरबाट छुट्याउन सकिन्छ।