Zakaj lahko struktura C ustvari slabo zahtevo SOCKS
Preverite izrecne širine polj, vrstni red bajtov in pretočni I/O, namesto da bi postavitev prevajalnika obravnavali kot omrežno obliko.
Veljaven naslov proxy ne naredi ročno napisanega sporočila SOCKS veljavnega. Pošiljanje strukture C ali C++ lahko pošlje zapolnitev ali cela števila v vrstnem redu gostitelja, ki jih protokol nikoli ni zahteval.
Za zahtevo SOCKS5 CONNECT z imenom domene to zaporedje izrecno serializirajte po pogajanju o metodi in morebitni izbrani overitvi:
- Različica, ukaz, rezervirani bajt in vrsta naslova
- Dolžina domene in bajti domene
- Dvobajtna ciljna vrata v omrežnem vrstnem redu bajtov
Dolžine naslovov so odvisne od različice SOCKS in vrste naslova. Številska polja s fiksno širino potrebujejo predpisano predstavitev; nizi domen imajo svoje lastno kodiranje dolžine. Zaključni znak niza C ni splošno navodilo za dodajanje ničle omrežnemu sporočilu.
| Bližnjica pri izvedbi | Težava za preverjanje |
|---|---|
| Dodeljevanje 32-bitne vrednosti prek 8-bitnega kazalca | Ne izpiše vseh štirih bajtov |
| Pretvorba medpomnilnika v kazalec na večje celo število | Poravnavo in vrstni red bajtov je treba še vedno obravnavati |
| Predpostavka, da je eno branje ali pisanje eno sporočilo | TCP lahko prenese le del zaporedja protokola |
Primerjajte vsako polje z nameravanim ciljem in obravnavajte delni I/O. Prejem dveh bajtov ne dokazuje, da je prispel celoten odgovor. Preverjanje teh meja lahko razlikuje okvarjeno zahtevo od strežnika, ki zavrača pravilno opisano povezavo.