C struct ખરાબ SOCKS વિનંતી કેમ બનાવી શકે
કમ્પાઇલર લેઆઉટને વાયર ફોર્મેટ ગણવાને બદલે સ્પષ્ટ ફીલ્ડ પહોળાઈ, બાઇટ ક્રમ અને સ્ટ્રીમ I/O તપાસો.
માન્ય પ્રોક્સી સરનામું હાથે લખેલા SOCKS સંદેશને માન્ય બનાવતું નથી. C અથવા C++ struct મોકલવાથી પ્રોટોકોલે ક્યારેય માંગ્યું ન હોય તેવું પેડિંગ કે હોસ્ટ-ક્રમના પૂર્ણાંકો મોકલાઈ શકે છે.
SOCKS5 ડોમેન-નામ CONNECT વિનંતી માટે, પદ્ધતિ વાટાઘાટ અને પસંદ કરેલી કોઈપણ પ્રમાણીકરણ પછી આ ક્રમને સ્પષ્ટ રીતે સીરીયલાઇઝ કરો:
- આવૃત્તિ, આદેશ, આરક્ષિત બાઇટ અને સરનામાનો પ્રકાર
- ડોમેન લંબાઈ અને ડોમેન બાઇટ્સ
- નેટવર્ક બાઇટ ક્રમમાં બે-બાઇટ ગંતવ્ય પોર્ટ
સરનામાની લંબાઈ SOCKS આવૃત્તિ અને સરનામાના પ્રકાર પર આધાર રાખે છે. નિશ્ચિત પહોળાઈના સંખ્યાત્મક ફીલ્ડને તેમની નિર્દિષ્ટ રજૂઆત જોઈએ; ડોમેન શબ્દમાળાઓનું પોતાનું લંબાઈ એન્કોડિંગ હોય છે. C શબ્દમાળા સમાપ્તિકર્તા વાયર સંદેશમાં શૂન્ય ઉમેરવાની સામાન્ય સૂચના નથી.
| અમલીકરણ ટૂંકો રસ્તો | તપાસવાની સમસ્યા |
|---|---|
| 8-બિટ પોઇન્ટર દ્વારા 32-બિટ મૂલ્ય સોંપવું | તે ચારેય બાઇટ ઉત્સર્જિત કરતું નથી |
| બફરને મોટા પૂર્ણાંક પોઇન્ટરમાં કાસ્ટ કરવું | સંરેખણ અને બાઇટ ક્રમ હજી સંભાળવા પડશે |
| ધારવું કે એક વાંચન કે લેખન એક સંદેશ છે | TCP પ્રોટોકોલ ક્રમનો ફક્ત એક ભાગ સ્થાનાંતરિત કરી શકે છે |
દરેક ફીલ્ડને ઇચ્છિત ગંતવ્ય સાથે સરખાવો અને આંશિક I/O સંભાળો. બે બાઇટ મળવાથી સાબિત થતું નથી કે સંપૂર્ણ જવાબ આવી ગયો. આ સીમાઓ તપાસવાથી વિકૃત વિનંતીને યોગ્ય રીતે વર્ણવાયેલા જોડાણને નકારતા સર્વરથી અલગ કરી શકાય છે.