Maison >développement back-end >Golang >Comment établir des connexions UTLS via le proxy HTTP 1.1 ?

Comment établir des connexions UTLS via le proxy HTTP 1.1 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-15 13:29:02844parcourir

How to Establish UTLS Connections via HTTP 1.1 Proxy?

Connexions UTLS proxy via HTTP 1.1

Lors de l'établissement de connexions UTLS, vous pouvez rencontrer la nécessité d'utiliser un proxy, tel qu'un proxy HTTP ou SOCKS5. Pour y parvenir, vous pouvez tirer parti des stratégies suivantes :

Tout d'abord, vous devrez créer une fonction de numérotation proxy personnalisée. Cette fonction prend la forme de dialTLS(network, addr string, _ *tls.Config) (net.Conn, erreur). En utilisant cette fonction, vous pouvez composer le proxy pour établir un net.Conn. Ensuite, utilisez net.Conn pour créer un client UTLS avant d'effectuer la poignée de main.

Voici un exemple de ce à quoi pourrait ressembler votre fonction dialTLS personnalisée :

import (
    "crypto/tls"
    "net"
    "net/url"

    "github.com/magisterquis/connectproxy"
    "golang.org/x/net/proxy"
    utls "github.com/refraction-networking/utls"
)

var proxyString = "http://127.0.0.1:8080"

dialTLS := func(network, addr string, _ *tls.Config) (net.Conn, error) {
    proxyURI, _ := url.Parse(proxyString)

    var proxyDialer proxy.Dialer
    switch proxyURI.Scheme {
    case "socks5":
        proxyDialer, err = proxy.SOCKS5("tcp", proxyString, nil, proxy.Direct)
    case "http":
        proxyDialer, err = connectproxy.New(proxyURI, proxy.Direct)
    }

    conn, err := proxyDialer.Dial("tcp", addr)
    uconn := utls.UClient(conn, cfg, &utls.HelloRandomizedALPN)
    // ... continue handshake and request
}

Voici quelques éléments supplémentaires conseils :

  • Envisagez d'utiliser le module "connectproxy" si vous envisagez d'effectuer un tunneling via un proxy HTTP CONNECT.
  • Explorez la source de transport enfichable Meek pour Tor. Son module 'utls.go' simplifie le processus, notamment la configuration du transport HTTP ou HTTP2 basé sur le protocole ALPN négocié. Il prend actuellement en charge SOCKS mais peut être adapté pour les proxys HTTP.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn