Jawaabaha SOCKS5 ee .NET 7+: maaraynta akhrinta TCP ee qayb ahaan
Akhri horgalaha go'an ee jawaabta amarka SOCKS5 iyo daba-galka ku xiran ATYP adigoon ku tiirsanayn xadka qoraalka TCP ee server-ka.
Server-ka SOCKS5 wuxuu afar byte si gooni ah u qoraa, macmiilkuna wuxuu shaqeeyaa kaliya marka qoraalladaas la isku daro. Isku darku wuxuu beddeli karaa waqtiga, laakiin TCP wali ma ballanqaado hal akhrin qoraal kasta.
Macmiilku wuxuu u baahan yahay falanqeeye jawaab. Kadib doorashada habka iyo xaqiijinta loo baahan yahay, jawaabta amarka SOCKS5 waxay ku bilaabataa afar byte: nooca, natiijada, byte kaydsan iyo nooca cinwaanka. Dhererka hadhay wuxuu ku xiran yahay nooca cinwaankaas.
Falanqeeye .NET 7+ oo kaliya u baahan inuu isticmaalo jawaab CONNECT guulaysatay wuxuu isticmaali karaa:
static async Task ReadConnectReply(Stream stream, CancellationToken ct)
{
byte[] prefix = new byte[4];
await stream.ReadExactlyAsync(prefix, ct);
if (prefix[0] != 5 || prefix[2] != 0)
throw new IOException("Invalid SOCKS5 reply");
if (prefix[1] != 0)
throw new IOException($"SOCKS5 request failed: {prefix[1]}");
int remaining;
switch (prefix[3])
{
case 1: remaining = 4 + 2; break;
case 4: remaining = 16 + 2; break;
case 3:
byte[] length = new byte[1];
await stream.ReadExactlyAsync(length, ct);
remaining = length[0] + 2;
break;
default:
throw new IOException("Unknown SOCKS5 address type");
}
await stream.ReadExactlyAsync(new byte[remaining], ct);
}
Laba byte ee ugu dambeeya waa dekedda la xidhay. IPv4 wuxuu u baahan yahay afar byte; IPv6 wuxuu u baahan yahay lix iyo toban; cinwaanka domain-ku wuxuu qaataa byte dherer ah ka hor magaca.
Bixi calaamad laalid oo leh waqtiga wada-hadalka loogu talagalay. ReadExactlyAsync wuxuu maareeyaa akhrin gaar ah oo gaaban wuxuuna tuuraa ka-reebid marka qulqulka dhammaado ka hor dhererka la codsaday. Haddii ay guuldareysato, iska tuur xiriirka guuldareystay iyada oo loo marayo wadada nadiifinta milkiilaha.
Marka guul la gaaro, joogso xadka jawaabta. Byte-yada ka dambeeya waxay ka tirsan yihiin borotokoolka meesha loo socdo. Akhrin male-awaal ah oo weyn waa inuu ilaaliyaa byte-yada dheeriga ah halkii uu tuuri lahaa bilowga qulqulka codsiga.