SOCKS4 savienojuma pieprasījums izdodas, taču lietotne nekad neredz servera sākotnējo sveicienu. Viena vieta, kur meklēt, ir savienotāja pirmā lasīšana. Sešpadsmit baitu lasīšana ir pārāk liela astoņu baitu SOCKS4 atbildei.

Atbildes lauksBaiti
Atbildes versijas lauks1
Rezultāta kods1
Porta lauks2
Adreses lauks4

Rezultāta kods 0x5a norāda, ka pieprasījums ir apstiprināts. SOCKS4a maina veidu, kā pieprasījums pārnēsā resursdatora nosaukumu; tas nepadara atbildi par sešpadsmit baitiem.

Pēc atbildes tas pats TCP strauts pārnēsā galamērķa protokolu. Pasta serveris var nosūtīt savu sveicienu nekavējoties. Tāpēc lasīšana, kas patērē sešpadsmit pieejamos baitus, var paņemt visu starpniekservera atbildi un šī sveiciena pirmos astoņus baitus. Ja vēl nekas neseko, pārāk liela bloķējoša lasīšana tā vietā var pievienot nevajadzīgu gaidīšanu.

Precīzais garums ir parsētāja atbildība

Vienreizēja astoņu baitu pieprasīšana nav pietiekams pierādījums, ka astoņi baiti ir ieradušies. Strauta lasījumi var atgriezt mazāk. Savāciet precīzu atbildes garumu termiņa ietvaros, apstājieties pie slēgta vai neizdevušās strauta, pārbaudiet atbildi un atstājiet nākamos baitus lietotnei.

Ja savienotājs izmanto lielāku buferētu lasīšanu, saglabājiet visu pēc robežas un nododiet to nākamajam patērētājam. Pārpalikuma izmešana ir tie paši datu zudumi ar citu lasīšanas izmēru.

SOCKS5 nepieciešams savs parsētājs. Tā atbildes adreses garums var atšķirties atkarībā no adreses tipa. Katras starpniekservera lasīšanas aizstāšana ar fiksētu astoņu baitu lasīšanu salabotu vienu protokolu, bet salauztu citu.

Saistītie raksti