"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso restringir o endereço IP do cliente HTTP do Go quando vários NICs estão presentes?

Como posso restringir o endereço IP do cliente HTTP do Go quando vários NICs estão presentes?

Publicado em 2024-11-08
Navegar:705

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

Como restringir o endereço IP do cliente HTTP

Go's http.Client permite solicitações HTTP eficientes, mas como você restringe seu endereço IP se o seu o sistema hospeda vários NICs?

Personalizando a ligação de IP

Para vincular o http.Client a um IP específico, modifique seu campo Transport com uma instância de net.Transport. Isso permite que você designe o net.Dialer para controlar o endereço local para conexões.

Exemplo de código

O trecho de código abaixo demonstra como vincular o cliente a um determinado endereço 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)
}

Ao usar esta abordagem, você pode especificar o endereço IP usado pelas conexões do cliente HTTP. Isso permite que você controle o IP de saída para flexibilidade de rede.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3