Eine gültige Proxyadresse macht eine handgeschriebene SOCKS-Nachricht nicht gültig. Das Senden einer C- oder C++-Struktur kann Padding oder Ganzzahlen in Host-Reihenfolge übertragen, die das Protokoll nie verlangt hat.

Für eine SOCKS5-CONNECT-Anfrage mit Domainnamen serialisieren Sie diese Reihenfolge explizit nach der Methodenaushandlung und einer eventuell gewählten Authentifizierung:

  1. Version, Befehl, reserviertes Byte und Adresstyp
  2. Domainlänge und Domain-Bytes
  3. Der zwei Byte große Zielport in Netzwerk-Byte-Reihenfolge

Adresslängen hängen von der SOCKS-Version und dem Adresstyp ab. Numerische Felder fester Breite benötigen ihre festgelegte Darstellung; Domain-Strings haben ihre eigene Längenkodierung. Ein C-String-Terminator ist keine allgemeine Anweisung, der Wire-Nachricht eine Null anzuhängen.

Abkürzung in der UmsetzungZu prüfendes Problem
Einem 32-Bit-Wert über einen 8-Bit-Zeiger zuweisenEs werden nicht alle vier Bytes ausgegeben
Einen Puffer auf einen Zeiger auf eine größere Ganzzahl castenAusrichtung und Byte-Reihenfolge müssen weiterhin behandelt werden
Annehmen, ein Lese- oder Schreibvorgang sei eine NachrichtTCP kann nur einen Teil der Protokollfolge übertragen

Vergleichen Sie jedes Feld mit dem beabsichtigten Ziel, und behandeln Sie partielles I/O. Das Empfangen von zwei Bytes beweist nicht, dass die gesamte Antwort angekommen ist. Die Prüfung dieser Grenzen kann eine fehlerhafte Anfrage von einem Server unterscheiden, der eine korrekt beschriebene Verbindung ablehnt.

Ähnliche Artikel