Freagairtean SOCKS5 ann an .NET 7+: a' làimhseachadh leughaidhean TCP pàirteach
Leugh ro-leasachan stèidhichte freagairt àithne SOCKS5 agus an iar-leasachan a tha an eisimeil air ATYP gun a bhith an eisimeil air crìochan sgrìobhaidh TCP an fhrithealaiche.
Sgrìobhas frithealaiche SOCKS5 ceithir beatan air leth, agus cha bhith an cleachdaiche ag obair gus an tèid na sgrìobhaidhean sin a chur còmhla. Faodaidh cur còmhla an ùine atharrachadh, ach chan eil TCP fhathast a' gealltainn aon leughadh airson gach sgrìobhadh.
Feumaidh am fear-cleachdaidh parsair freagairt. Às dèidh taghadh modha agus dearbhadh sam bith a tha a dhìth, tòisicheas freagairt àithne SOCKS5 le ceithir beatan: tionndadh, toradh, beit glèidhte agus seòrsa seòlaidh. Tha am faid a tha air fhàgail an eisimeil air an t-seòrsa seòlaidh sin.
Faodaidh parsair .NET 7+ nach fheum ach freagairt CONNECT shoirbheachail ithe cleachdadh:
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 e an dà bheat mu dheireadh am port ceangailte. Feumaidh IPv4 ceithir beatan; feumaidh IPv6 sia-deug; bidh beit faid aig seòladh fearainn roimh an ainm.
Thoir seachad comharra cuir-à-mach leis an ùine cho-rèiteachaidh a tha san amharc. Làimhsicheas ReadExactlyAsync leughaidhean fa leth nas giorra agus tilgidh e eisgeachd nuair a chrìochnaicheas an t-sruth roimh an fhaid a chaidh iarraidh. Ma dh'fhàillicheas e, thoir air falbh an ceangal a dh'fhàillich tro shlighe glanaidh an neach-seilbh aige.
Ma shoirbhicheas e, stad aig crìoch na freagairt. Buinidh na beatan às a dhèidh do phròtacal a' chinn-uidhe. Feumaidh leughadh tuairmeasach nas motha na beatan a bharrachd a ghlèidheadh seach toiseach sruth na h-aplacaid a thilgeil air falbh.