En giltig proxyadress gör inte ett handskrivet SOCKS-meddelande giltigt. Att skicka en C- eller C++-struct kan skicka utfyllnad eller heltal i värdordning som protokollet aldrig efterfrågade.

För en SOCKS5 CONNECT-begäran med domännamn, serialisera denna sekvens explicit efter metodförhandling och eventuell vald autentisering:

  1. Version, kommando, reserverad byte och adresstyp
  2. Domänlängd och domänbytes
  3. Den två byte stora målporten i nätverksbyteordning

Adresslängder beror på SOCKS-versionen och adresstypen. Numeriska fält med fast bredd behöver sin angivna representation; domänsträngar har sin egen längdkodning. En C-strängterminator är inte en allmän instruktion att lägga till en nolla i trådmeddelandet.

Genväg i implementeringenProblem att kontrollera
Tilldela ett 32-bitars värde via en 8-bitars pekareDen skickar inte ut alla fyra byten
Casta en buffert till en pekare till ett större heltalJustering och byteordning måste fortfarande hanteras
Anta att en läsning eller skrivning är ett meddelandeTCP kan bara överföra en del av protokollsekvensen

Jämför varje fält med den avsedda destinationen och hantera partiell I/O. Att ta emot två byten bevisar inte att hela svaret har anlänt. Att granska dessa gränser kan skilja en felaktig begäran från en server som avvisar en korrekt beskriven anslutning.

Relaterade artiklar