"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo restringir la dirección IP del cliente HTTP de Go cuando hay varias NIC presentes?

¿Cómo puedo restringir la dirección IP del cliente HTTP de Go cuando hay varias NIC presentes?

Publicado el 2024-11-08
Navegar:492

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

Cómo restringir la dirección IP del cliente HTTP

http.Client de Go permite solicitudes HTTP eficientes, pero ¿cómo se restringe su dirección IP si su ¿El sistema alberga varias NIC?

Personalizar el enlace de IP

Para vincular el cliente http.a una IP específica, modifique su campo Transporte con una instancia de net.Transport. Esto le permite designar net.Dialer para controlar la dirección local para las conexiones.

Ejemplo de código

El siguiente fragmento de código muestra cómo vincular el cliente a un determinado dirección IP local:

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)
}

Al utilizar este enfoque, puede especificar la dirección IP utilizada por las conexiones del cliente HTTP. Esto le permite controlar la IP saliente para mayor flexibilidad de red.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3