ホームページ >バックエンド開発 >Golang >HTTP 1.1 プロキシ経由で UTLS 接続を確立するにはどうすればよいですか?

HTTP 1.1 プロキシ経由で UTLS 接続を確立するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-15 13:29:02873ブラウズ

How to Establish UTLS Connections via HTTP 1.1 Proxy?

HTTP 1.1 経由のプロキシ UTLS 接続

UTLS 接続を確立するとき、HTTP や SOCKS5 プロキシなどのプロキシを利用する必要が生じる場合があります。これを実現するには、次の戦略を活用できます。

まず、カスタム プロキシ ダイヤラー関数を作成する必要があります。この関数は、dialTLS(network, addr string, _ *tls.Config) (net.Conn, error) の形式をとります。この機能を使用すると、プロキシにダイヤルして net.Conn を確立できます。その後、ハンドシェイクを実行する前に、net.Conn を使用して UTLS クライアントを作成します。

以下は、カスタム DialTLS 関数がどのように見えるかの例です。

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
}

ここに追加の機能がいくつかあります。ヒント:

  • HTTP CONNECT プロキシ経由でトンネリングする予定がある場合は、「connectproxy」モジュールの使用を検討してください。
  • Tor の Meek プラガブル トランスポート ソースを調べてください。その「utls.go」モジュールは、ネゴシエートされた ALPN プロトコルに基づいた HTTP または HTTP2 トランスポートのセットアップなどのプロセスを簡素化します。現在 SOCKS をサポートしていますが、HTTP プロキシにも適応できます。

以上がHTTP 1.1 プロキシ経由で UTLS 接続を確立するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。