Kāpēc C struktūra var radīt sliktu SOCKS pieprasījumu
Pārbaudiet skaidros lauku platumus, baitu secību un straumes I/O, tā vietā lai kompilatora izkārtojumu uzskatītu par tīkla formātu.
Derīga starpniekservera adrese nepadara ar roku rakstītu SOCKS ziņojumu derīgu. Sūtot C vai C++ struktūru, var nosūtīt polsterējumu vai veselus skaitļus saimniekdatora secībā, ko protokols nekad nav pieprasījis.
SOCKS5 CONNECT pieprasījumam ar domēna nosaukumu serializējiet šo secību tieši pēc metodes sarunām un jebkuras izvēlētās autentifikācijas:
- Versija, komanda, rezervētais baits un adreses tips
- Domēna garums un domēna baiti
- Divu baitu galamērķa ports tīkla baitu secībā
Adrešu garumi ir atkarīgi no SOCKS versijas un adreses tipa. Fiksēta platuma skaitliskiem laukiem nepieciešams to noteiktais attēlojums; domēnu virknēm ir savs garuma kodējums. C virknes terminators nav vispārīgs norādījums pievienot nulli tīkla ziņojumam.
| Īstenošanas saīsne | Pārbaudāmā problēma |
|---|---|
| 32 bitu vērtības piešķiršana caur 8 bitu rādītāju | Tas neizvada visus četrus baitus |
| Bufera pārveide par lielāka vesela skaitļa rādītāju | Izlīdzināšana un baitu secība joprojām jāapstrādā |
| Pieņemt, ka viena lasīšana vai rakstīšana ir viens ziņojums | TCP var pārsūtīt tikai daļu protokola secības |
Salīdziniet katru lauku ar paredzēto galamērķi un apstrādājiet daļēju I/O. Divu baitu saņemšana nepierāda, ka ir pienākusi visa atbilde. Šo robežu pārbaude var atšķirt bojātu pieprasījumu no servera, kas noraida pareizi aprakstītu savienojumu.