Ответ
Диапазоны IP-адресов различаются для IPv4 и IPv6.
IPv4
- Формат: 32 бита, представляемые как четыре десятичных числа (октета) от 0 до 255, разделенных точками (например,
192.168.1.1). - Общий диапазон: От
0.0.0.0до255.255.255.255. - Частные (не маршрутизируемые в Интернете) диапазоны RFC 1918:
10.0.0.0–10.255.255.255(маска /8)172.16.0.0–172.31.255.255(маска /12)192.168.0.0–192.168.255.255(маска /16)
- Широковещательный адрес в локальной сети:
255.255.255.255.
IPv6
- Формат: 128 бит, представляемые как восемь групп по четыре шестнадцатеричных цифры, разделенных двоеточиями (например,
2001:0db8:85a3:0000:0000:8a2e:0370:7334). - Общий диапазон: От
::(все нули) доffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff. - Важные зарезервированные диапазоны:
::1/128— адрес loopback.fe80::/10— link-local адреса (аналог APIPA169.254.x.xв IPv4).fc00::/7— уникальные локальные адреса (ULA, аналог частных диапазонов в IPv4).ff00::/8— multicast адреса.
Пример проверки IPv4 на C++:
#include <string>
#include <sstream>
#include <vector>
bool isValidIPv4(const std::string& ip) {
std::vector<int> parts;
std::stringstream ss(ip);
std::string part;
while (std::getline(ss, part, '.')) {
if (part.empty()) return false;
for (char c : part) if (!isdigit(c)) return false;
int num = std::stoi(part);
if (num < 0 || num > 255) return false;
parts.push_back(num);
}
return parts.size() == 4;
} Ответ 18+ 🔞
А, ну это про айпишники, да? Ёпта, сидишь ты такой, настраиваешь роутер, а там тебе — введи адрес. И начинается: то точку забыл, то число больше 255 впихнул, а оно тебе — ошибка, иди нахуй. Давайте разберёмся, что к чему, а то волнение ебать, с этими цифрами.
Вот есть два главных типа, как два брата, но один старше и тупее, а второй младше и заумный до овердохуища.
IPv4 — старый дед, но пока живой
- Как выглядит: Четыре числа через точки, от 0 до 255. Типа
192.168.1.1. Всего 32 бита, если кому интересно. - Где вообще могут быть адреса: От
0.0.0.0до255.255.255.255. Но не все они для нас, простых смертных. - Наши, домашние, внутренние (RFC 1918): Те, которые в интернет не светятся, чтоб не позориться. Запомни три штуки:
10.0.0.0–10.255.255.255(огромная сеть, маска /8)172.16.0.0–172.31.255.255(поменьше, маска /12)192.168.0.0–192.168.255.255(самая популярная, маска /16) — вот это у тебя скорее всего на роутере и висит.
- Крик на всю деревню:
255.255.255.255— это чтобы орать всем устройствам в локальной сети сразу.
IPv6 — молодой и дерзкий, но нихуя не понятный
- Как выглядит: Восемь кусков из шестнадцатеричных цифр, разделённых двоеточием. Например,
2001:0db8:85a3:0000:0000:8a2e:0370:7334. Ёб твою мать, 128 бит! Адресов — просто овердохуища. - Диапазон: От
::(полный ноль) доffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff(полная хуйня). - Важные штуки, которые выделили:
::1/128— это localhost, себя любимого.fe80::/10— link-local, типа "я сам с собой договорился", когда DHCP сдох.fc00::/7— наши, внутренние, типа частных в IPv4.ff00::/8— для рассылки всем-всем-всем (multicast).
А вот, бля, пример кода на C++, как проверить IPv4 Чтоб не вводить хуйню в программу. Смотри, тут всё просто: разбиваем строку по точкам, смотрим, чтобы было ровно 4 числа, и каждое было от 0 до 255. Если нет — значит, пидарас шерстяной что-то напутал.
#include <string>
#include <sstream>
#include <vector>
bool isValidIPv4(const std::string& ip) {
std::vector<int> parts;
std::stringstream ss(ip);
std::string part;
while (std::getline(ss, part, '.')) {
if (part.empty()) return false;
for (char c : part) if (!isdigit(c)) return false;
int num = std::stoi(part);
if (num < 0 || num > 255) return false;
parts.push_back(num);
}
return parts.size() == 4;
}
Вот и вся магия. Главное — не перепутать, где точка, а где двоеточие, а то получится какая-то мартышлюшка, а не адрес.