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