C struct खराब SOCKS विनंती का तयार करू शकते
कंपाइलर लेआउटला वायर फॉर्मेट मानण्याऐवजी स्पष्ट फील्ड रुंदी, बाइट क्रम आणि स्ट्रीम I/O तपासा.
वैध प्रॉक्सी पत्ता हाताने लिहिलेल्या SOCKS संदेशाला वैध करत नाही. C किंवा C++ struct पाठवल्यास प्रोटोकॉलने कधीही मागितली नसलेली पॅडिंग किंवा होस्ट-क्रमातील पूर्णांक पाठवले जाऊ शकतात.
SOCKS5 डोमेन-नाव CONNECT विनंतीसाठी, पद्धत वाटाघाटी आणि निवडलेल्या कोणत्याही प्रमाणीकरणानंतर हा क्रम स्पष्टपणे सिरिअलाइज करा:
- आवृत्ती, कमांड, राखीव बाइट आणि पत्ता प्रकार
- डोमेन लांबी आणि डोमेन बाइट्स
- नेटवर्क बाइट क्रमात दोन-बाइट गंतव्य पोर्ट
पत्त्यांची लांबी SOCKS आवृत्ती आणि पत्ता प्रकारावर अवलंबून असते. निश्चित रुंदीच्या संख्यात्मक फील्डना त्यांचे निर्दिष्ट प्रतिनिधित्व आवश्यक असते; डोमेन स्ट्रिंगचे स्वतःचे लांबी एन्कोडिंग असते. C स्ट्रिंग टर्मिनेटर वायर संदेशात शून्य जोडण्याची सामान्य सूचना नाही.
| अंमलबजावणीतील शॉर्टकट | तपासण्याची समस्या |
|---|---|
| 8-बिट पॉइंटरद्वारे 32-बिट मूल्य नियुक्त करणे | ते चारही बाइट्स उत्सर्जित करत नाही |
| बफरला मोठ्या पूर्णांक पॉइंटरमध्ये कास्ट करणे | संरेखन आणि बाइट क्रम अजूनही हाताळावा लागतो |
| एक वाचन किंवा लेखन एक संदेश आहे असे गृहीत धरणे | TCP प्रोटोकॉल क्रमाचा फक्त एक भाग हस्तांतरित करू शकते |
प्रत्येक फील्डची इच्छित गंतव्याशी तुलना करा आणि आंशिक I/O हाताळा. दोन बाइट्स मिळाल्याने संपूर्ण उत्तर आले आहे हे सिद्ध होत नाही. त्या सीमा तपासल्यास विकृत विनंती योग्यरीत्या वर्णन केलेले कनेक्शन नाकारणाऱ्या सर्व्हरपासून वेगळी करता येते.