HTTP クライアントの IP アドレスを制限する方法
Go の http.Client を使用すると効率的な HTTP リクエストが可能になりますが、次の場合にその IP アドレスを制限するにはどうすればよいですか?システムには複数の NIC が搭載されていますか?
IP のカスタマイズバインディング
http.Client を特定の IP にバインドするには、その Transport フィールドを net.Transport のインスタンスで変更します。これにより、接続用のローカル アドレスを制御する net.Dialer を指定できます。
コード例
以下のコード スニペットは、クライアントを指定されたアドレスにバインドする方法を示しています。ローカル IP アドレス:
<code class="go">import ( "net" "net/http" "net/http/httputil" "time" ) func main() { // Resolve the local IP address localAddr, err := net.ResolveIPAddr("ip", "<my local address>") 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) }</code>
この方法を使用すると、HTTP クライアントの接続で使用される IP アドレスを指定できます。これにより、送信 IP を制御してネットワークを柔軟にできるようになります。
以上が複数の NIC が存在する場合、Go の HTTP クライアントの IP アドレスを制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。