Ответ
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)
}
}
} Ответ 18+ 🔞
А, слушай, смотри, IP-адрес, ёпта! Это типа как паспортный стол, только для твоего компа в интернете. Уникальный такой числовой ярлык, чтобы пакеты данных знали, куда им топать. Без него — нихуя не работает, пиздец.
Ну, версии, блядь:
- IPv4: Старый добрый, 32-битный, записывается как четыре цифры через точку, типа
8.8.8.8. Адресов этих уже дохуя раздали, почти все, ебать мои старые костыли, кончились. - IPv6: Новый, 128-битный, адресов там — овердохуища, на всех хватит. Выглядит страшно:
2001:0db8:85a3:0000:0000:8a2e:0370:7334. Целых восемь групп, блядь, цифр и букв, через двоеточие.
А ещё они бывают разные, сука:
- Публичные (белые): Как квартира с номером на весь дом — уникальные, в интернете видны всем.
- Приватные (серые): Как комната в коммуналке. Только внутри своей локальной сети (
192.168.0.5, например). На улицу, в интернет, с таким не выйдешь. - Специальные: Ну, типа
127.0.0.1— это localhost, обращение самому к себе, любимому. А0.0.0.0— это типа «слушаю все двери, которые есть». Хитрая жопа, но полезная.
В Go с этим работать — одно удовольствие, блядь!
Пакет net — просто сказка. Главный тип там — net.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)
}
}
}
Вот и вся магия, блядь. ParseIP — он как умный швейцар: если видит адекватный адрес — пропускает, а если какую-то хуйню вроде not-an-ip — сразу говорит «иди нахуй», возвращает nil. А потом метод To4() смотрит — четвёрка это или шестёрка. Красота, в рот меня чих-пых!