Freagraí SOCKS5 in .NET 7+: léamh TCP páirteach a láimhseáil
Léigh réimír sheasmhach fhreagra ordú SOCKS5 agus an iarmhír atá ag brath ar ATYP gan brath ar theorainneacha scríofa TCP an fhreastalaí.
Scríobhann freastalaí SOCKS5 ceithre bheart ar leith, agus ní oibríonn an cliant go dtí go gcomhcheanglaítear na scríobhanna sin. Is féidir le comhcheangal an t-amú a athrú, ach ní gheallann TCP fós léamh amháin in aghaidh gach scríofa.
Teastaíonn parsálaí freagra ón gcliant. Tar éis roghnú modha agus aon fhíordheimhniú riachtanach, tosaíonn freagra ordaithe SOCKS5 le ceithre bheart: leagan, toradh, beart curtha in áirithe agus cineál seolta. Braitheann an fad atá fágtha ar an gcineál seolta sin.
Is féidir le parsálaí .NET 7+ nach gá dó ach freagra CONNECT rathúil a ídiú an méid seo a úsáid:
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);
}
Is é an dá bheart dheireanacha an port ceangailte. Teastaíonn ceithre bheart ó IPv4; teastaíonn sé cinn déag ó IPv6; iompraíonn seoladh fearainn beart fad roimh an ainm.
Cuir comhartha cealaithe ar fáil leis an spriocdháta caibidlíochta beartaithe. Láimhseálann ReadExactlyAsync léamha aonair níos giorra agus caitheann sé eisceacht nuair a chríochnaíonn an sruth roimh an fhad iarrtha. Ar theip, déan an nasc teipthe a scriosadh trí chonair ghlanta a úinéara.
Ar rath, stop ag teorainn an fhreagra. Baineann na bearta ina dhiaidh sin le prótacal an chinn scríbe. Ní mór do léamh speantasúil níos mó na bearta barrachais a chaomhnú seachas tús shruth an fheidhmchláir a chaitheamh amach.