func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
    dialer, err := proxy.SOCKS5(
        "tcp",
        "127.0.0.1:1080",
        nil,
        &net.Dialer{Timeout: 5 * time.Second},
    )
    if err != nil {
        return nil, err
    }
    contextDialer, ok := dialer.(proxy.ContextDialer)
    if !ok {
        return nil, errors.New("SOCKS dialer lacks context support")
    }
    return contextDialer.DialContext(ctx, "tcp", destination)
}

Taobh a-staigh pasgan lìonraidh Go a tha ann mar-thà, cleachd na h-in-ionmhais context, errors, net, time agus x/net/proxy. Chan eil an argamaid nil a' taghadh creideasan SOCKS sam bith. Airson ceann-uidhe poblach air slighe proxy poblach a tha ceadaichte, tha an liosta proxy SOCKS5 a' tabhann thagraichean airson ceann-phuing an dialer.

Tha an dearbhadh proxy.ContextDialer a chaidh a chur a-mach a' toirt air buileachaidhean nach eil a' faighinn taic fàiligeadh gu soilleir. Thoir sùil air an eisimeileachd a chaidh a chur an sàs an àite a bhith ag ainmeachadh seòrsa dialer a-staigh no a' tòiseachadh goroutine a tha a' bacadh nach urrainn don neach-fàgail a stiùireadh.

Tha an co-theacsa a' riaghladh stèidheachadh a' cheangail. Aon uair 's gun tèid net.Conn a thilleadh, cuir ceann-làithean leughaidh/sgrìobhaidh iomchaidh no ceann-làithean iarrtais aig ìre nas àirde an sàs. Tha ceann-là ceangail dialer bunaiteach agus buidseat iomlan aplacaid nan crìochan eadar-dhealaichte.

Airson amalachadh giùlain HTTP, cùm a ghiùlan àbhaisteach TLS agus HTTP. Is e an t-sruth SOCKS mothachail air co-theacsa a thèid a thilleadh an gluasad chun a' ghiùlain, chan e freagairt no poileasaidh fad-beatha airson a h-uile beit às dèidh sin.

Artaigilean co-cheangailte