>백엔드 개발 >Golang >Go의 net/http 클라이언트에서 IPv4/IPv6 사용을 어떻게 시행하나요?

Go의 net/http 클라이언트에서 IPv4/IPv6 사용을 어떻게 시행하나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 04:33:28418검색

How to Enforce IPv4/IPv6 Usage in Go's net/http Client?

Go의 net/http 클라이언트에서 IPv4/IPv6 사용 시행

문제:

Go 1.11의 net/ 사용 http 클라이언트, 도메인이 IPv6 전용인지 확인하고 이를 사용하지 못하게 하려면 어떻게 해야 합니까? 원하는 경우 IPv4를 사용하시겠습니까?

해결책:

Go의 net/http 클라이언트에서 IPv4 또는 IPv6 사용을 적용하려면 net.Dialer의 Control 옵션을 사용하여 DialContext 기능을 수정하세요. . 이 기능은 나가는 연결에 사용되는 네트워크 유형을 확인합니다.

다음 코드를 기본 기능에 복사합니다.

<code class="go">func ModifiedTransport() {
    var MyTransport = &http.Transport{
        DialContext: (&net.Dialer{
            Timeout:   30 * time.Second,
            KeepAlive: 30 * time.Second,
            DualStack: false,
            Control: func(network, address string, c syscall.RawConn) error {
                if network == "ipv4" {
                    // Force cancellation of IPv4 connections
                    return errors.New("you should not use ipv4")
                }
                return nil
            },
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }
    var myClient = http.Client{Transport: MyTransport}
    resp, myerr := myClient.Get("http://www.github.com")
    if myerr != nil {
        fmt.Println("request error")
        return
    }
    var buffer = make([]byte, 1000)
    resp.Body.Read(buffer)
    fmt.Println(string(buffer))
}</code>

설명:

  • 제어 기능은 나가는 연결의 네트워크 유형(예: "tcp4" 또는 "tcp6").
  • 네트워크 유형이 "ipv4"인 경우 제어 기능은 오류를 반환하여 IPv4 연결 설정을 방지합니다.
  • 이 접근 방식을 사용하면 IPv6 연결만 가능합니다. 허용하여 모든 IPv4 사용을 효과적으로 차단합니다.

위 내용은 Go의 net/http 클라이언트에서 IPv4/IPv6 사용을 어떻게 시행하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.