ホームページ >バックエンド開発 >Golang >Go で IP アドレスが範囲内にあるかどうかを効率的に確認するにはどうすればよいですか?

Go で IP アドレスが範囲内にあるかどうかを効率的に確認するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-11 15:20:03826ブラウズ

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

Go で範囲内の IP アドレスを効率的に確認する

IP アドレスが指定された範囲内にあるかどうかを判断することは、さまざまなネットワークで共通の要件です。操作。 Go では、このタスクに対処するためのアプローチがいくつかあります。

最も速い方法: bytes.Compare

最も効率的な方法の 1 つは、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 アドレスが範囲内にあることを示します。

使用例

次のコードは、バイトの使用法。比較メソッド:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。