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, komanda, rezervisani bajt i tip adrese
  2. Dužina domene i bajtovi domene
  3. Dvobajtni odredišni port u mrežnom redoslijedu bajtova

Dužine adresa zavise od verzije SOCKS-a i tipa adrese. Numerička polja fiksne širine trebaju svoj propisani prikaz; tekstualni nizovi domena imaju vlastito kodiranje dužine. Terminator C niza nije opća uputa da se mrežnoj poruci doda nula.

Prečica u implementacijiProblem koji treba provjeriti
Dodjela 32-bitne vrijednosti kroz 8-bitni pokazivačNe ispisuje sva četiri bajta
Kastanje bafera 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

Uporedite svako polje s namjeravanim odredištem i obradite djelimični I/O. Primanje dva bajta ne dokazuje da je stigao cijeli odgovor. Pregled tih granica može razlikovati neispravan zahtjev od servera koji odbija ispravno opisanu vezu.

Povezani članci