En gyldig proxyadresse gør ikke en håndskrevet SOCKS-besked gyldig. Hvis man sender en C- eller C++-struct, kan man sende padding eller heltal i værtsrækkefølge, som protokollen aldrig har bedt om.

Til en SOCKS5 CONNECT-anmodning med domænenavn skal denne sekvens serialiseres eksplicit efter metodeforhandling og eventuel valgt godkendelse:

  1. Version, kommando, reserveret byte og adressetype
  2. Domænelængde og domænebytes
  3. Den to-byte destinationsport i netværksbyte-rækkefølge

Adresselængder afhænger af SOCKS-versionen og adressetypen. Numeriske felter med fast bredde skal have deres angivne repræsentation; domænestrenge har deres egen længdekodning. En C-strengterminator er ikke en generel instruks om at tilføje et nul til wire-beskeden.

ImplementeringsgenvejProblem at kontrollere
At tildele en 32-bit værdi gennem en 8-bit pointerDen udsender ikke alle fire bytes
At caste en buffer til en pointer til et større heltalJustering og byte-rækkefølge skal stadig håndteres
At antage, at én læsning eller skrivning er én beskedTCP kan kun overføre en del af protokolsekvensen

Sammenlign hvert felt med den tilsigtede destination, og håndtér delvis I/O. At modtage to bytes beviser ikke, at hele svaret er ankommet. Ved at undersøge disse grænser kan man skelne en fejlbehæftet anmodning fra en server, der afviser en korrekt beskrevet forbindelse.

Relaterede artikler