Miért eredményezhet egy C struktúra hibás SOCKS kérést
Vizsgálja meg a kifejezett mezőszélességeket, a bájtok sorrendjét és a folyam-I/O-t ahelyett, hogy a fordító elrendezését tekintené hálózati formátumnak.
Egy érvényes proxycím nem tesz érvényessé egy kézzel írt SOCKS-üzenetet. Egy C vagy C++ struktúra küldése olyan kitöltést vagy hosztsorrendű egészeket küldhet, amelyeket a protokoll soha nem kért.
Egy SOCKS5 tartománynévvel végzett CONNECT-kéréshez sorosítsa ezt a sorrendet kifejezetten a metódusegyeztetés és a kiválasztott hitelesítés után:
- Verzió, parancs, fenntartott bájt és címtípus
- Tartományhossz és tartománybájtok
- A kétbájtos célport hálózati bájtsorrendben
A címhosszúságok a SOCKS verziójától és a címtípustól függenek. A rögzített szélességű numerikus mezőknek megadott ábrázolásra van szükségük; a tartománystringek saját hosszkódolással rendelkeznek. A C-string lezáró nem általános utasítás egy nulla hozzáfűzésére a hálózati üzenethez.
| Megvalósítási rövidítés | Ellenőrizendő probléma |
|---|---|
| 32 bites érték hozzárendelése 8 bites mutatón keresztül | Nem adja ki mind a négy bájtot |
| Puffer átalakítása nagyobb egész szám mutatójává | Az igazítást és a bájtsorrendet továbbra is kezelni kell |
| Feltételezni, hogy egy olvasás vagy írás egy üzenet | A TCP csak a protokollsorozat egy részét tudja továbbítani |
Hasonlítsa össze az egyes mezőket a szándékolt céllal, és kezelje a részleges I/O-t. Két bájt fogadása nem bizonyítja, hogy a teljes válasz megérkezett. E határok vizsgálata megkülönböztetheti a hibás kérést egy olyan kiszolgálótól, amely elutasít egy helyesen leírt kapcsolatot.