Чаму структура C можа стварыць дрэнны запыт SOCKS
Правярайце відавочныя шырыні палёў, парадак байтаў і патокавы I/O, замест таго каб лічыць размяшчэнне ад кампілятара сеткавым фарматам.
Сапраўдны адрас проксі не робіць самаробнае паведамленне SOCKS правільным. Адпраўка структуры C або C++ можа перадаць выроўніванне або цэлыя лікі ў парадку хоста, якіх пратакол ніколі не патрабаваў.
Для запыту SOCKS5 CONNECT з імем дамена серыялізуйце гэту паслядоўнасць відавочна пасля ўзгаднення метаду і любой абранай аўтэнтыфікацыі:
- Версія, каманда, зарезерваваны байт і тып адраса
- Даўжыня дамена і байты дамена
- Двухбайтавы порт прызначэння ў сеткавым парадку байтаў
Даўжыні адрасоў залежаць ад версіі SOCKS і тыпу адраса. Лікавыя палі фіксаванай шырыні патрабуюць свайго вызначанага прадстаўлення; радкі дамена маюць уласнае кадаванне даўжыні. Завяршальнік радка C не з'яўляецца агульнай інструкцыяй дадаць нуль да сеткавага паведамлення.
| Скарочаны шлях рэалізацыі | Праблема для праверкі |
|---|---|
| Прысваенне 32-бітнага значэння праз 8-бітны паказальнік | Ён не выводзіць усе чатыры байты |
| Прывядзенне буфера да паказальніка на большы цэлы лік | Выраўніванне і парадак байтаў усё яшчэ трэба апрацоўваць |
| Меркаванне, што адно чытанне або запіс — адно паведамленне | TCP можа перадаць толькі частку паслядоўнасці пратаколу |
Параўнайце кожнае поле з меркаваным прызначэннем і апрацоўвайце частковы I/O. Атрыманне двух байтаў не даказвае, што прыйшоў увесь адказ. Агляд гэтых межаў дазваляе адрозніць няправільны запыт ад сервера, які адмаўляе карэктна апісанае злучэнне.