63 if (!
value.contains(u
':') && !
value.contains(ValidatorIpPrivate::regex)) {
70 static const std::vector<std::pair<QHostAddress, int>> ipv4Private(
73 {QHostAddress(u
"10.0.0.0"_s), 8},
78 {QHostAddress(u
"169.254.0.0"_s), 16},
82 {QHostAddress(u
"172.16.0.0"_s), 12},
86 {QHostAddress(u
"192.168.0.0"_s), 12}});
89 static const std::vector<std::pair<QHostAddress, int>> ipv4Reserved(
92 {QHostAddress(u
"0.0.0.0"_s), 8},
96 {QHostAddress(u
"100.64.0.0"_s), 10},
100 {QHostAddress(u
"127.0.0.1"_s), 8},
104 {QHostAddress(u
"192.0.0.0"_s), 24},
108 {QHostAddress(u
"192.0.2.0"_s), 24},
112 {QHostAddress(u
"192.88.99.0"_s), 24},
116 {QHostAddress(u
"198.18.0.0"_s), 15},
120 {QHostAddress(u
"198.51.100.0"_s), 24},
124 {QHostAddress(u
"203.0.113.0"_s), 24},
128 {QHostAddress(u
"240.0.0.0"_s), 4},
132 {QHostAddress(u
"255.255.255.255"_s), 32}});
135 static const std::vector<std::pair<QHostAddress, int>> ipv6Private(
137 {QHostAddress(u
"fc00::"_s), 7},
140 {QHostAddress(u
"fe80::"_s), 10}});
143 static const std::vector<std::pair<QHostAddress, int>> ipv6Reserved(
145 {QHostAddress(u
"::"_s), 128},
148 {QHostAddress(u
"::1"_s), 128},
151 {QHostAddress(u
"::ffff:0:0"_s), 96},
155 {QHostAddress(u
"100::"_s), 64},
159 {QHostAddress(u
"64:ff9b::"_s), 96},
162 {QHostAddress(u
"2001::"_s), 32},
165 {QHostAddress(u
"2001:10::"_s), 28},
168 {QHostAddress(u
"2001:20::"_s), 28},
171 {QHostAddress(u
"2001:db8::"_s), 32},
174 {QHostAddress(u
"2002::"_s), 16}});
178 if (a.setAddress(
value)) {
182 if (a.protocol() == QAbstractSocket::IPv4Protocol) {
184 if (constraints.testFlag(
IPv6Only)) {
189 valid = !std::ranges::any_of(
190 ipv4Private, [&a](
const std::pair<QHostAddress, int> &subnet) {
191 return a.isInSubnet(subnet.first, subnet.second);
196 valid = !std::ranges::any_of(
197 ipv4Reserved, [&a](
const std::pair<QHostAddress, int> &subnet) {
198 return a.isInSubnet(subnet.first, subnet.second);
203 if (a.isInSubnet(QHostAddress(u
"224.0.0.0"_s), 4)) {
210 if (constraints.testFlag(
IPv4Only)) {
215 valid = !std::ranges::any_of(
216 ipv6Private, [&a](
const std::pair<QHostAddress, int> &subnet) {
217 return a.isInSubnet(subnet.first, subnet.second);
222 valid = !std::ranges::any_of(
223 ipv6Reserved, [&a](
const std::pair<QHostAddress, int> &subnet) {
224 return a.isInSubnet(subnet.first, subnet.second);
229 if (a.isInSubnet(QHostAddress(u
"ff00::"_s), 8)) {
QString qtTrId(const char *id, int n=-1) const