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:

  1. Verzija, naredba, rezervirani bajt i vrsta adrese
  2. Duljina domene i bajtovi domene
  3. 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 implementacijiProblem 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 brojPoravnanje i redoslijed bajtova još treba obraditi
Pretpostavka da je jedno čitanje ili pisanje jedna porukaTCP 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.

Povezani članci