「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 複数の NIC が存在する場合、Go の HTTP クライアントの IP アドレスを制限するにはどうすればよいですか?

複数の NIC が存在する場合、Go の HTTP クライアントの IP アドレスを制限するにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:186

How do I constrain the IP address of Go\'s HTTP client when multiple NICs are present?

HTTP クライアントの IP アドレスを制限する方法

Go の http.Client を使用すると効率的な HTTP リクエストが可能になりますが、次の場合、その IP アドレスを制限するにはどうすればよいですか?システムには複数の NIC が格納されています?

IP バインディングのカスタマイズ

http.Client を特定の IP にバインドするには、その Transport フィールドを net.Transport のインスタンスで変更します。これにより、接続用のローカル アドレスを制御する net.Dialer を指定できます。

コード例

以下のコード スニペットは、クライアントを指定されたアドレスにバインドする方法を示しています。ローカル IP アドレス:

import (
    "net"
    "net/http"
    "net/http/httputil"
    "time"
)

func main() {
    // Resolve the local IP address
    localAddr, err := net.ResolveIPAddr("ip", "")
    if err != nil {
        panic(err)
    }

    // Create a TCPAddr instance to specify the local address without specifying a port
    localTCPAddr := net.TCPAddr{
        IP: localAddr.IP,
    }

    // Create an HTTP client with a custom transport that specifies the local address
    webclient := &http.Client{
        Transport: &http.Transport{
            Proxy:                 http.ProxyFromEnvironment,
            DialContext:          (&net.Dialer{
                LocalAddr:      &localTCPAddr,
                Timeout:       30 * time.Second,
                KeepAlive:     30 * time.Second,
                DualStack:     true,
            }).DialContext,
            MaxIdleConns:          100,
            IdleConnTimeout:       90 * time.Second,
            TLSHandshakeTimeout:   10 * time.Second,
            ExpectContinueTimeout: 1 * time.Second,
        },
    }

    // Execute an HTTP request using the customized client
    req, _ := http.NewRequest("GET", "http://www.google.com", nil)
    resp, _ := webclient.Do(req)
    defer resp.Body.Close()
    
    // Optionally, use httputil to get the status code and response body
    code, _ := httputil.DumpResponse(resp, true)
    fmt.Println(code)
}

この方法を使用すると、HTTP クライアントの接続で使用される IP アドレスを指定できます。これにより、ネットワークの柔軟性を高めるために発信 IP を制御できるようになります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3