РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1091 of 1593 menu

Функция net.ParseCIDR

Функция net.ParseCIDR анализирует строку, содержащую сетевой адрес в формате CIDR (Classless Inter-Domain Routing), и возвращает два значения: сам IP-адрес (тип net.IP) и сеть с маской (тип net.IPNet). В первый параметр функция принимает строку с адресом вида "192.0.2.0/24" или "2001:db8::/32".

Если строка не соответствует формату CIDR, функция возвращает nil, nil и ошибку. Важно отметить, что функция не проверяет, принадлежит ли IP-адрес указанной сети, она лишь возвращает разобранные компоненты.

Синтаксис

ip, ipnet, err := net.ParseCIDR(cidr)

Пример

Давайте разберем строку CIDR для IPv4-адреса:

package main import ( "fmt" "net" ) func main() { cidr := "192.0.2.0/24" ip, ipnet, err := net.ParseCIDR(cidr) if err != nil { fmt.Println("Error:", err) return } fmt.Println("IP:", ip) fmt.Println("Network:", ipnet) fmt.Println("Mask:", ipnet.Mask) }

Результат выполнения кода:

"IP: 192.0.2.0" "Network: 192.0.2.0/24" "Mask: ffffff00"

Пример

Разберем строку CIDR для IPv6-адреса:

package main import ( "fmt" "net" ) func main() { cidr := "2001:db8::/32" ip, ipnet, err := net.ParseCIDR(cidr) if err != nil { fmt.Println("Error:", err) return } fmt.Println("IP:", ip) fmt.Println("Network:", ipnet) fmt.Println("Mask:", ipnet.Mask) }

Результат выполнения кода:

"IP: 2001:db8::" "Network: 2001:db8::/32" "Mask: ffffffff000000000000000000000000"

Пример

Попробуем передать некорректную строку CIDR:

package main import ( "fmt" "net" ) func main() { cidr := "192.0.2.0/33" ip, ipnet, err := net.ParseCIDR(cidr) if err != nil { fmt.Println("Error:", err) return } fmt.Println("IP:", ip) fmt.Println("Network:", ipnet) }

Результат выполнения кода:

"Error: invalid CIDR address: 192.0.2.0/33"

Пример

Полученную сеть можно использовать для проверки принадлежности адреса:

package main import ( "fmt" "net" ) func main() { cidr := "10.0.0.0/16" _, ipnet, err := net.ParseCIDR(cidr) if err != nil { fmt.Println("Error:", err) return } ip := net.ParseIP("10.0.1.2") if ipnet.Contains(ip) { fmt.Println("IP belongs to network") } else { fmt.Println("IP does not belong to network") } }

Результат выполнения кода:

"IP belongs to network"

Смотрите также

  • функцию net.ParseIP,
    которая разбирает IP-адрес в строковом представлении
  • функцию net.SplitHostPort,
    которая разделяет адрес хоста и порта
  • функцию net.JoinHostPort,
    которая объединяет хост и порт в один адрес
  • тип net.IPNet,
    который представляет сеть с маской подсети
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить