Сапраўдны адрас проксі не робіць самаробнае паведамленне SOCKS правільным. Адпраўка структуры C або C++ можа перадаць выроўніванне або цэлыя лікі ў парадку хоста, якіх пратакол ніколі не патрабаваў.

Для запыту SOCKS5 CONNECT з імем дамена серыялізуйце гэту паслядоўнасць відавочна пасля ўзгаднення метаду і любой абранай аўтэнтыфікацыі:

  1. Версія, каманда, зарезерваваны байт і тып адраса
  2. Даўжыня дамена і байты дамена
  3. Двухбайтавы порт прызначэння ў сеткавым парадку байтаў

Даўжыні адрасоў залежаць ад версіі SOCKS і тыпу адраса. Лікавыя палі фіксаванай шырыні патрабуюць свайго вызначанага прадстаўлення; радкі дамена маюць уласнае кадаванне даўжыні. Завяршальнік радка C не з'яўляецца агульнай інструкцыяй дадаць нуль да сеткавага паведамлення.

Скарочаны шлях рэалізацыіПраблема для праверкі
Прысваенне 32-бітнага значэння праз 8-бітны паказальнікЁн не выводзіць усе чатыры байты
Прывядзенне буфера да паказальніка на большы цэлы лікВыраўніванне і парадак байтаў усё яшчэ трэба апрацоўваць
Меркаванне, што адно чытанне або запіс — адно паведамленнеTCP можа перадаць толькі частку паслядоўнасці пратаколу

Параўнайце кожнае поле з меркаваным прызначэннем і апрацоўвайце частковы I/O. Атрыманне двух байтаў не даказвае, што прыйшоў увесь адказ. Агляд гэтых межаў дазваляе адрозніць няправільны запыт ад сервера, які адмаўляе карэктна апісанае злучэнне.

Падобныя артыкулы