net/http 클라이언트에서 IPv4 또는 IPv6 강제 적용
Go 1.11에서 net/http 패키지는 다음을 수행할 수 있는 DialContext 기능을 제공합니다. 나가는 네트워크 연결을 가로채서 제어합니다. 이 기능은 클라이언트가 IPv4 또는 IPv6을 사용하도록 강제하는 데 사용할 수 있습니다.
IPv4 전용 연결
IPv4 주소에 대한 연결을 제한하려면 다이얼러를 false로 설정하고 네트워크 유형 "ipv4"에 대한 오류를 반환하는 제어 함수를 정의합니다.
type MyTransport struct {
http.RoundTripper
}
func (t *MyTransport) RoundTrip(req *http.Request) (*http.Response, error) {
return http.DefaultTransport.RoundTrip(req)
}
func main() {
MyTransport := &MyTransport{
DialContext: (&net.Dialer{
DualStack: false,
Control: func(network, address string, c syscall.RawConn) error {
if network == "ipv4" {
return errors.New("you should not use ipv4")
}
return nil
},
}).DialContext,
}
client := http.Client{Transport: MyTransport}
_, err := client.Get("http://www.github.com")
if err != nil {
fmt.Println(err)
}
}
이 수정은 네트워크 연결을 가로채고 IPv4 연결이 시도되면 오류를 반환합니다.
참고: 제어 함수에 전달되는 네트워크 값은 "tcp4"일 수 있습니다. IPv4의 경우 "tcp6", IPv6의 경우 "tcp"가 DialContext 함수에 전달된 경우에도 마찬가지입니다.
IPv6-Only 연결
IPv6 전용 연결을 강제하려면 DualStack을 false로 설정하고 네트워크 유형 "ipv6"에 대해 오류를 반환합니다.
type MyTransport struct {
http.RoundTripper
}
func (t *MyTransport) RoundTrip(req *http.Request) (*http.Response, error) {
return http.DefaultTransport.RoundTrip(req)
}
func main() {
MyTransport := &MyTransport{
DialContext: (&net.Dialer{
DualStack: false,
Control: func(network, address string, c syscall.RawConn) error {
if network == "ipv6" {
return errors.New("you should not use ipv6")
}
return nil
},
}).DialContext,
}
client := http.Client{Transport: MyTransport}
_, err := client.Get("http://www.github.com")
if err != nil {
fmt.Println(err)
}
}
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3