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