Ответ
IP-адрес (Internet Protocol Address) — это уникальный числовой идентификатор устройства (например, компьютера или сервера) в компьютерной сети, работающей по протоколу IP. Он используется для адресации и маршрутизации пакетов данных.
Основные версии:
- IPv4: 32-битный адрес, записывается в виде четырех десятичных чисел от 0 до 255, разделенных точками (например,
8.8.8.8
). Адресное пространство почти исчерпано. - IPv6: 128-битный адрес, решает проблему нехватки адресов IPv4. Записывается в виде восьми групп по четыре шестнадцатеричные цифры, разделенных двоеточиями (например,
2001:0db8:85a3:0000:0000:8a2e:0370:7334
).
Типы адресов:
- Публичные (белые): Глобально уникальные, маршрутизируются в интернете.
- Приватные (серые): Используются в локальных сетях (например,
192.168.0.0/16
,10.0.0.0/8
). Не маршрутизируются в интернете. - Специальные: Например,
127.0.0.1
(localhost) — адрес для обращения к своему же устройству,0.0.0.0
— для прослушивания всех доступных сетевых интерфейсов.
Работа с IP-адресами в Go
Пакет net
предоставляет мощные и удобные инструменты для работы с IP-адресами. Основной тип — net.IP
.
Пример: парсинг и валидация IP-адреса
package main
import (
"fmt"
"net"
)
func main() {
addrStrings := []string{"192.0.2.1", "2001:db8::68", "not-an-ip"}
for _, addrStr := range addrStrings {
ip := net.ParseIP(addrStr)
if ip == nil {
fmt.Printf("'%s' - это невалидный IP-адресn", addrStr)
continue
}
if ip.To4() != nil {
fmt.Printf("'%s' - это валидный IPv4 адресn", addrStr)
} else {
fmt.Printf("'%s' - это валидный IPv6 адресn", addrStr)
}
}
}