Зашто C структура може да произведе лош SOCKS захтев
Проверите експлицитне ширине поља, редослед бајтова и стрим I/O уместо да распоред компајлера третирате као мрежни формат.
Исправна адреса проксија не чини ручно написану SOCKS поруку исправном. Слање C или C++ структуре може послати поравнање или целе бројеве у редоследу хоста које протокол никада није захтевао.
За SOCKS5 CONNECT захтев са именом домена, серијализујте овај низ експлицитно након преговора о методи и изабране аутентификације:
- Верзија, команда, резервисани бајт и тип адресе
- Дужина домена и бајтови домена
- Двобајтни одредишни порт у мрежном редоследу бајтова
Дужине адреса зависе од верзије SOCKS-а и типа адресе. Нумеричка поља фиксне ширине захтевају свој прописани приказ; текстни низови домена имају сопствено кодирање дужине. Терминатор C низа није општа упутство да се мрежној поруци дода нула.
| Пречица у имплементацији | Проблем који треба проверити |
|---|---|
| Додела 32-битне вредности кроз 8-битни показивач | Не исписује сва четири бајта |
| Кастовање бафера у показивач на већи цео број | Поравнање и редослед бајтова још треба обрадити |
| Претпоставка да је једно читање или писање једна порука | TCP може пренети само део низа протокола |
Упоредите свако поље са намераваним одредиштем и обрадите делимични I/O. Примање два бајта не доказује да је стигао цео одговор. Преглед тих граница може разликовати неисправан захтев од сервера који одбија исправно описану везу.