Go での高速 IP 範囲チェック
Go では、IP アドレスが指定された範囲内にあるかどうかを効率的に判断することが、ネットワーク管理とセキュリティタスク。この記事では、この課題に対処する最も迅速なアプローチを検討します。
IP アドレスが特定の範囲内にあるかどうかを確認する効率的な方法は、bytes.Compare 関数を使用して範囲のエンドポイントと比較することです。 Go では IP アドレスが bigendian [] バイト スライスとして表現されるため、この比較が正確になります。
以下のコード例は、このアプローチを示しています。
package main import ( "bytes" "fmt" "net" ) var ( ip1 = net.ParseIP("216.14.49.184") ip2 = net.ParseIP("216.14.49.191") ) func check(ip string) bool { trial := net.ParseIP(ip) if trial.To4() == nil { fmt.Printf("%v is not an IPv4 address\n", trial) return false } if bytes.Compare(trial, ip1) >= 0 && bytes.Compare(trial, ip2) <= 0 { fmt.Printf("%v is between %v and %v\n", trial, ip1, ip2) return true } fmt.Printf("%v is NOT between %v and %v\n", trial, ip1, ip2) return false } func main() { check("1.2.3.4") check("216.14.49.185") check("1::16") }
このコードは、次の出力を生成します。
1.2.3.4 is NOT between 216.14.49.184 and 216.14.49.191 216.14.49.185 is between 216.14.49.184 and 216.14.49.191 1::16 is not an IPv4 address
要約すると、範囲チェックで IP アドレスを比較するために bytes.Compare を使用することは、Go で最も効率的な方法であり、正確かつ高速に決意。
以上がGo で IP アドレスが範囲内にあるかどうかを効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。