Исправна адреса проксија не чини ручно написану SOCKS поруку исправном. Слање C или C++ структуре може послати поравнање или целе бројеве у редоследу хоста које протокол никада није захтевао.

За SOCKS5 CONNECT захтев са именом домена, серијализујте овај низ експлицитно након преговора о методи и изабране аутентификације:

  1. Верзија, команда, резервисани бајт и тип адресе
  2. Дужина домена и бајтови домена
  3. Двобајтни одредишни порт у мрежном редоследу бајтова

Дужине адреса зависе од верзије SOCKS-а и типа адресе. Нумеричка поља фиксне ширине захтевају свој прописани приказ; текстни низови домена имају сопствено кодирање дужине. Терминатор C низа није општа упутство да се мрежној поруци дода нула.

Пречица у имплементацијиПроблем који треба проверити
Додела 32-битне вредности кроз 8-битни показивачНе исписује сва четири бајта
Кастовање бафера у показивач на већи цео бројПоравнање и редослед бајтова још треба обрадити
Претпоставка да је једно читање или писање једна порукаTCP може пренети само део низа протокола

Упоредите свако поље са намераваним одредиштем и обрадите делимични I/O. Примање два бајта не доказује да је стигао цео одговор. Преглед тих граница може разликовати неисправан захтев од сервера који одбија исправно описану везу.

Повезани чланци