Zašto C struktura može proizvesti loš SOCKS zahtjev
Provjerite eksplicitne širine polja, redoslijed bajtova i stream I/O umjesto da raspored prevoditelja tretirate kao mrežni format.
Ispravna proxy adresa ne čini ručno napisanu SOCKS poruku ispravnom. Slanje C ili C++ strukture može poslati poravnanje ili cijele brojeve u redoslijedu hosta koje protokol nikada nije zahtijevao.
Za SOCKS5 CONNECT zahtjev s imenom domene, serijalizirajte ovaj slijed eksplicitno nakon pregovora o metodi i odabrane autentifikacije:
- Verzija, naredba, rezervirani bajt i vrsta adrese
- Duljina domene i bajtovi domene
- Dvobajtni odredišni port u mrežnom redoslijedu bajtova
Duljine adresa ovise o verziji SOCKS-a i vrsti adrese. Numerička polja fiksne širine trebaju svoj propisani prikaz; tekstualni nizovi domena imaju vlastito kodiranje duljine. Terminator C niza nije opća uputa da se mrežnoj poruci doda nula.
| Prečac u implementaciji | Problem koji treba provjeriti |
|---|---|
| Dodjela 32-bitne vrijednosti kroz 8-bitni pokazivač | Ne ispisuje sva četiri bajta |
| Kastanje međuspremnika u pokazivač na veći cijeli broj | Poravnanje i redoslijed bajtova još treba obraditi |
| Pretpostavka da je jedno čitanje ili pisanje jedna poruka | TCP može prenijeti samo dio slijeda protokola |
Usporedite svako polje s namjeravanim odredištem i obradite djelomični I/O. Primanje dva bajta ne dokazuje da je stigao cijeli odgovor. Pregled tih granica može razlikovati neispravan zahtjev od poslužitelja koji odbija ispravno opisanu vezu.