>백엔드 개발 >Golang >Go에서 IP 주소가 범위 내에 있는지 효율적으로 확인하는 방법은 무엇입니까?

Go에서 IP 주소가 범위 내에 있는지 효율적으로 확인하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-11 15:20:03827검색

How to Efficiently Check if an IP Address is Within a Range in Go?

Go에서 효율적으로 범위 내 IP 주소 확인

IP 주소가 지정된 범위에 속하는지 확인하는 것은 다양한 네트워크에서 공통 요구 사항입니다. 운영. Go에는 이 작업을 해결하기 위한 여러 접근 방식이 있습니다.

가장 빠른 방법: bytes.Compare

가장 효율적인 방법 중 하나는 bytes.Compare 함수를 사용하는 것입니다. IP 주소의 바이트 표현을 비교합니다.

import (
    "bytes"
    "net"
)

// Check if an IP address is within a range
func check(trial, start, end net.IP) bool {
    if start.To4() == nil || end.To4() == nil || trial.To4() == nil {
        return false
    }
    return bytes.Compare(trial, start) >= 0 && bytes.Compare(trial, end) <= 0
}

이 접근 방식에서는 먼저 주어진 IP 주소가 유효한지 확인합니다. IPv4 주소. 그런 다음 bytes.Compare를 사용하여 평가판 IP의 바이트 표현과 범위의 시작 및 끝 지점을 비교합니다. 비교 결과 두 검사 모두에서 음수가 아닌 값이 나오면 IP 주소가 범위 내에 있다는 의미입니다.

사용 예

다음 코드는 bytes.Compare 메소드 사용법:

import (
    "fmt"
    "net"
)

var (
    ip1 = net.ParseIP("216.14.49.184")
    ip2 = net.ParseIP("216.14.49.191")
)

func main() {
    check := func(ip string) {
        trial := net.ParseIP(ip)
        res := check(trial, ip1, ip2)
        fmt.Printf("%v is %v within range %v to %v\n", trial, res, ip1, ip2)
    }
    check("1.2.3.4")
    check("216.14.49.185")
    check("216.14.49.191")
}

출력:

1.2.3.4 is false within range 216.14.49.184 to 216.14.49.191
216.14.49.185 is true within range 216.14.49.184 to 216.14.49.191
216.14.49.191 is true within range 216.14.49.184 to 216.14.49.191

위 내용은 Go에서 IP 주소가 범위 내에 있는지 효율적으로 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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