C اسٹرکچر خراب SOCKS درخواست کیوں پیدا کر سکتا ہے
کمپائلر لے آؤٹ کو وائر فارمیٹ سمجھنے کے بجائے واضح فیلڈ چوڑائی، بائٹ ترتیب اور اسٹریم I/O کی جانچ کریں۔
درست پراکسی ایڈریس ہاتھ سے لکھے SOCKS پیغام کو درست نہیں بناتا۔ C یا C++ اسٹرکچر بھیجنے سے ایسی پیڈنگ یا ہوسٹ ترتیب کے صحیح اعداد بھیجے جا سکتے ہیں جو پروٹوکول نے کبھی نہیں مانگے۔
SOCKS5 ڈومین نام والی CONNECT درخواست کے لیے، طریقہ کار کی گفتگو اور منتخب کردہ کسی بھی تصدیق کے بعد اس ترتیب کو واضح طور پر سیریلائز کریں:
- ورژن، کمانڈ، محفوظ بائٹ اور ایڈریس کی قسم
- ڈومین کی لمبائی اور ڈومین بائٹس
- نیٹ ورک بائٹ ترتیب میں دو بائٹ کا منزل پورٹ
ایڈریس کی لمبائیاں SOCKS ورژن اور ایڈریس کی قسم پر منحصر ہیں۔ مقررہ چوڑائی والے عددی فیلڈز کو ان کی متعین نمائندگی درکار ہے؛ ڈومین اسٹرنگز کی اپنی لمبائی انکوڈنگ ہے۔ C اسٹرنگ ٹرمینیٹر وائر پیغام میں صفر شامل کرنے کی عمومی ہدایت نہیں ہے۔
| عمل درآمد میں شارٹ کٹ | جانچنے والا مسئلہ |
|---|---|
| 8 بٹ پوائنٹر کے ذریعے 32 بٹ قدر تفویض کرنا | یہ چاروں بائٹس خارج نہیں کرتا |
| بفر کو بڑے صحیح عدد پوائنٹر میں کاسٹ کرنا | سیدھ اور بائٹ ترتیب اب بھی سنبھالنی ہوگی |
| یہ فرض کرنا کہ ایک پڑھنا یا لکھنا ایک پیغام ہے | TCP پروٹوکول ترتیب کا صرف ایک حصہ منتقل کر سکتا ہے |
ہر فیلڈ کا موازنہ مطلوبہ منزل سے کریں اور جزوی I/O سنبھالیں۔ دو بائٹس ملنا یہ ثابت نہیں کرتا کہ پورا جواب آ گیا۔ ان حدود کی جانچ بگڑی ہوئی درخواست کو درست طور پر بیان کردہ کنکشن مسترد کرنے والے سرور سے الگ کر سکتی ہے۔