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

All'interno di un pacchetto di rete Go esistente, usa gli import context, errors, net, time e x/net/proxy. L'argomento nil non seleziona credenziali SOCKS. Per una destinazione pubblica su una rotta proxy pubblica consentita, l'elenco di proxy SOCKS5 offre candidati per l'endpoint del dialer.

L'asserzione esportata proxy.ContextDialer fa fallire esplicitamente le implementazioni non supportate. Verifica la dipendenza distribuita invece di nominare un tipo di dialer interno o avviare una goroutine bloccante che il chiamante non può gestire.

Il context governa la configurazione della connessione. Una volta restituito un net.Conn, applica scadenze di lettura/scrittura adeguate o scadenze di richiesta di livello superiore. Il timeout di connessione di un dialer di base e il budget totale di un'applicazione sono limiti diversi.

Per un'integrazione del trasporto HTTP, conserva il suo normale comportamento TLS e HTTP. Il flusso SOCKS consapevole del context restituito è la consegna al trasporto, non una risposta né una politica di durata per tutti i byte successivi.

Articoli correlati