Firwat eng C-Struktur eng schlecht SOCKS-Ufro kann erstellen
Préift explizit Feldbreeten, Byte-Reiefolleg an Stream-I/O, amplaz d'Layout vum Compiler als Wire-Format ze behandelen.
Eng gülteg Proxy-Adress mécht eng handgeschriwwen SOCKS-Noriicht net gülteg. Eng C- oder C++-Struktur ze schécke kann Padding oder Ganzzuelen an der Host-Reiefolleg schécken, déi de Protokoll ni gefrot huet.
Fir eng SOCKS5-CONNECT-Ufro mat Domainnumm, serialiséiert dës Reiefolleg explizit no der Methodeverhandlung an enger eventuell ausgewielter Authentifizéierung:
- Versioun, Kommando, reservéierte Byte an Adresstyp
- Domainlängt an Domainbytes
- Den zwee-Byte-Destinatiounsport an der Netzwierk-Byte-Reiefolleg
Adresstlängten hänken vun der SOCKS-Versioun an dem Adresstyp of. Numeresch Felder mat fester Breet brauchen hir spezifizéiert Duerstellung; Domain-Strings hunn hir eegen Längt-Kodéierung. En C-String-Terminator ass keng allgemeng Instruktioun, eng Null un d'Wire-Noriicht ze hänken.
| Kuerzwee an der Ëmsetzung | Problem ze préifen |
|---|---|
| En 32-Bit-Wäert iwwer en 8-Bit-Zeiger zouweisen | Et gëtt net all véier Bytes aus |
| E Puffer op e Zeiger op eng méi grouss Ganzzuel casten | Ausriichtung a Byte-Reiefolleg musse weiderhi behandelt ginn |
| Unhuelen, datt eng Liese- oder Schreiwen een Noriicht ass | TCP kann nëmmen en Deel vun der Protokollsequenz iwwerdroen |
Vergläicht all Feld mat der geduechter Destinatioun a behandelt deelweis I/O. Zwee Bytes z'erhalen beweist net, datt déi ganz Äntwert ukomm ass. D'Prüfe vun dëse Grenze kann eng feelerhaft Ufro vun engem Server ënnerscheeden, deen eng korrekt beschriwwen Verbindung ofleet.