首頁  >  文章  >  後端開發  >  Go中如何檢查IP位址是否在特定範圍內?

Go中如何檢查IP位址是否在特定範圍內?

Patricia Arquette
Patricia Arquette原創
2024-11-26 01:53:09442瀏覽

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

在Go/GoLang 中檢查IP 位址範圍

在Go 中使用IP 位址時,您可能會遇到需要確定是否給定IP 位址屬於特定範圍。透過 Go 的內建函數,此任務變得簡單且有效率。

要檢查IP 位址是否在某個範圍內,請依照下列步驟操作:

1.將IP 位址轉換為位元組:

使用net.ParseIP 函數將範圍起始和結束IP 位址以及輸入IP 位址轉換為位元組切片。此函數傳回一個 IP 類型,它是 IP 位址的 bigendian 位元組切片表示形式。

2.比較位元組片:

使用 bytes.Compare 比較輸入 IP 位址和範圍起始和結束 IP 位址的位元組片。此函數傳回一個整數,指示位元組切片的相對順序:

  • 如果bytes.Compare(input, start) >= 0,則輸入IP 位址大於或等於起始位置
  • 如果bytes.Compare(input, end)

範例程式碼:

以下程式碼示範如何使用位元組檢查 IP 位址是否在某個範圍內。比較:

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")
}

在此範例中,檢查函數會先嘗試解析輸入的 IP 位址。如果它不是有效的 IPv4 位址,則會傳回錯誤訊息。否則,它使用 bytes.Compare 將輸入 IP 位址的位元組片與範圍的起始和結束 IP 位址進行比較。然後列印結果並傳回布林值,指示輸入的 IP 位址是否在範圍內。

透過利用 bytes.Compare,Go 提供了一種高效且直接的方法來檢查 IP 位址是否在指定範圍內,使其成為 IP 位址操作任務的寶貴工具。

以上是Go中如何檢查IP位址是否在特定範圍內?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn