Galiojantis tarpinio serverio adresas nepadaro ranka rašyto SOCKS pranešimo galiojančiu. Siunčiant C arba C++ struktūrą galima nusiųsti užpildą arba sveikuosius skaičius šeimininko tvarka, kurių protokolas niekada nereikalavo.

SOCKS5 CONNECT užklausai su domeno vardu, suserializuokite šią seką tiesiogiai po metodo derybų ir pasirinktos autentifikacijos:

  1. Versija, komanda, rezervuotas baitas ir adreso tipas
  2. Domeno ilgis ir domeno baitai
  3. Dviejų baitų paskirties prievadas tinklo baitų tvarka

Adresų ilgiai priklauso nuo SOCKS versijos ir adreso tipo. Fiksuoto pločio skaitmeniniams laukams reikia nustatyto jų vaizdavimo; domenų eilutės turi savą ilgio kodavimą. C eilutės terminatorius nėra bendra instrukcija pridėti nulį prie tinklo pranešimo.

Diegimo trumpinysTikrintina problema
32 bitų reikšmės priskyrimas per 8 bitų rodyklęJis neišveda visų keturių baitų
Buferio konvertavimas į didesnio sveikojo skaičiaus rodyklęLygiavimą ir baitų tvarką vis tiek reikia apdoroti
Manyti, kad vienas skaitymas ar rašymas yra vienas pranešimasTCP gali perduoti tik dalį protokolo sekos

Palyginkite kiekvieną lauką su numatytu tikslu ir apdorokite dalinį I/O. Gavus du baitus neįrodyta, kad atėjo visas atsakymas. Šių ribų patikrinimas gali atskirti netaisyklingą užklausą nuo serverio, atsisakančio teisingai aprašyto ryšio.

Susiję straipsniai