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)
}

Ene de ekzistanta Go-retpakaĵo, uzu la importojn context, errors, net, time kaj x/net/proxy. La argumento nil elektas neniujn SOCKS-akreditaĵojn. Por publika celo sur permesita publika prokura vojo, la listo de SOCKS5-prokuroj proponas kandidatojn por la finpunkto de la dialer.

La elportita aserto proxy.ContextDialer igas nesubtenatajn efektivigojn eksplicite malsukcesi. Kontrolu la disfalditan dependaĵon anstataŭ nomi internan dialer-tipon aŭ lanĉi blokantan gorutinon, kiun la vokanto ne povas administri.

La kunteksto regas la starigon de la ligo. Post kiam net.Conn estas redonita, apliku taŭgajn legajn/skribajn aŭ pli altnivelajn petajn templimojn. La liga tempolimo de baza dialer kaj la totala buĝeto de aplikaĵo estas malsamaj limoj.

Por HTTP-transporta integriĝo, konservu ĝian normalan TLS- kaj HTTP-konduton. La redonita kuntekstokonscia SOCKS-fluo estas la transdono al la transporto, ne respondo nek vivdaŭra politiko por ĉiuj postaj bitokoj.

Rilataj artikoloj