Nos nuper statum LIR suscepimus et /29 scandalum IPv6. Et tunc necessitas orta est ut subnets assignatorum custodiat. Et quia exosculatio nostra in PHP scripta est, parum debebamus incurrere et animadvertere hanc linguam non esse amicissimam secundum operandi cum IPv6. Infra incisum est nostra solutio quaestionum ortarum cum operando cum inscriptionibus et iugis. Fortasse non elegantissimum, sed officium.

A frenum in doctrina
Disclaimer. Si nota quid sit IPv6, et quid sit, haec pars tibi sit amet. Fieri non potest.
Qui annotationem IPv6 primum viderint, satis graviter detegunt. Post elegantem 64.233.177.101 repente adversus 2607:f8b0:4002:c08::8b and we may get confusa. Ambae sunt iustae repraesentationes hominum legibiles 32 et 128 bits, respective. Any IP packet contains a header with a strict standardised purpose for each bit. Nihil altius in structuram capitis procedendum, hoc unum auferre debemus, quod ad operationes cum IP inscriptionibus et ordinibus, plerumque opportunum est utendi mathematicis binariis et bitsis operationibus. Commodissimum est etiam eas in database condere BINARIUS (4) quia IPv4 et * BINARIUS (16) ad IPv6.
Alia ratio momenti quae attingere valet, personas retis et notatio CIDR est. CIDR Acronym pro Classless inter Domain Routing (). Haec notio genus notionis substituit in determinando utra pars IP oratio sit praeverbium retis, et quae pars est electronica retis interfaciei intra hoc retis. In usu, prima n praepositione iungenda respondenti apponetur 1 , reliqua 0 .
In forma intelligibili humana, hoc scriptum est in forma ip.add.re.ss/cidr. Eg 64.233.177.0/24 primus indicat particulam 24 ad praepositionem pertinere. Ultimae 8 particulae, quae notae sunt ut ultimi numeri in notationibus lectibilibus humanis, inscriptione intra subnet referuntur. A duobus pluribus exercitiis. 64.233.177.101/32 и 2607:f8b0:4002:c08::8b/128 — una certae inscriptionis. 2607:f8b0:4002:c08::/64 — Primae 64 particulae (primae 4 circuli) sunt praepositionis, reliquae 64 particulae sunt particulae locales. Obiter si quis confundatur per "::" in introitu, duplex colon substituit numerum arbitrarium sectionum continentium 0. In annotatione semel tantum apparere potest. In aliis verbis, 2607:f8b0:4002:c08::8b = 2607:f8b0:4002:c08:0:0:0:8b.
Quid opus est omnibus his discere? Uno modo oratio subnet prima et ultima obtineri potest utentes binarii ET et OR, cognoscentes larvam in forma binaria. Secundo, magnitudine proxima subnet (i.e. cum CIDR) n I addendo computari potest ad n—that position in binary representation. Per binarii dico effectus utendi munera stipant () и inet_pton () et adhuc usus per binarium est repraesentatio systematis binarii quod obtineri potest, dic; base_convert ().
historical notitiaClassis segregatio classium classium praecederet tacita inscriptione. In illis longinquis annis nemo tot subnetes fore existimabat: dextra dextraque in magnas cuneos distributa sunt: classis A - praepositio prima 8 frusta (i.e. primus numerus), cum primoribus 0; classis B — 16 prima (duo prior numeri), primores calcaria X; classis C - primae 10 frena, primores frena 24. Hi primores frenos designant septa in quibus inscriptio particularis classis prolata est; 0.0.0.0 - 127.255.255.255 pro classis A; 128.0.0.0 - 191.255.255.255 - classis B, 192.0.0.0 - 223.255.255.255 - classis C. Cum in Interreti per planetam divulgatum est, moderatores intellexerunt se characterem omisisse, et in primis 90s conceptum praepeditum elaboraverunt, qui effecit ut non ligari posset. ad Tibul. Paulo fusius reperiri dicito; .
Lets moventur in usu
In praxi, tria fere, ut mihi videbatur, opera;
- primam et ultimam orationem complectens;
- deinde data magnitudine range (CIDR);
- an oratio iniecta pertineat complector.
Exsecutio erit pro IPv6, sed, si opus est, logica facile accommodabitur. Ego got aliquas ideas sed paulo aliter implevit. Item, exempla non reprehendo pro erroribus input. Eamus igitur.
Ut iam monui, prima et postrema inscriptio ampliandi determinari potest utens operationes bitwise, cognoscens principium extensionis et larva subnet binarii. Primum igitur, quod faciendum est, CIDR in larvam binariam convertitur. Ad hoc faciendum, repraesentationem eius hexam colligemus et eam in binarium colligemus.
function cidrToMask ($cidr) {
$mask = str_repeat('f', ceil($cidr / 4));
$mask .= dechex(4 * ($cidr % 4));
$mask = str_pad($mask, 32, '0');
return pack('H*', $mask);
}voca stipant ('H', $ larva) sicut repraesentatur hei sarcinas inet_pton (). Sola differentia est, quando vocant stipant () omnes 0s in locis suis debent esse, et nullae coloniae in vestibulo, secus humano-readabili ingressu.
Proximus gradus est computare initium et finem range. Et hic nuances oriuntur. Bitwise operationes per frenum processus capacitatis limitantur. Itaque, me 32-bit CubieTruck, quo interdum pro omnibus generibus tentationum utar, non poterit omnia 128 particulas inscriptionis in una operatione procedere. Nihil tamen prohibet nos eam in partes 32 dividere (sicut in casu, qui novit quos processus processus persequemur).
function getRangeBoundary ($ip, $cidr, $which, $ipIsBin = false, $returnBin = false) {
$mask = cidrToMask($cidr);
if (!$ipIsBin) {
$ip = inet_pton($ip);
}
$ipParts = str_split($ip, 4);
$maskParts = str_split($mask, 4);
$rangeParts = [];
for ($i = 0; $i < count($ipParts); $i++) {
if ($which == 'start') {
/* Побитовый & адреса и маски оставит только биты префикса. */
$rangeParts[$i] = $ipParts[$i] & $maskParts[$i];
} else {
/* Побитовый | с обратной маской (~) оставит биты префикса и установит все биты локальной части в 1. */
$rangeParts[$i] = $ipParts[$i] | ~$maskParts[$i];
}
}
$rangeBoundary = implode($rangeParts);
if ($returnBin) {
return $rangeBoundary;
} else {
return inet_ntop($rangeBoundary);
}
}Ad futurum usum, facultatem tradendi IP praebebimus et exitum accipiemus tam in forma binaria quam in humano-legenda. Parameter $ quod hic determinat utrum initium vel finem extensionis obtinere volumus (valores 'initium' aut 'finem' resp).
Proximum opus (et etiam utilissimum nostris societatibus) proximam partem computat. Ad hoc opus, nihil melius in mentem venit quam oratio in chorda binaria dilatare et 1 in optato loco addere, ac deinde omnia retro decidere. Ad artificia ubivis apparentia vitanda, inscriptionem per byte in compositione et congregatione dividere decrevi.
function getNextBlock ($ipStart, $cidr, $ipIsBin = false, $returnBin = false) {
if (!$ipIsBin) {
$ipStart = inet_pton($ipStart);
}
$ipParts = str_split($ipStart, 1);
$ipBin = '';
foreach ($ipParts as $ipPart) {
$ipBin .= str_pad(base_convert(unpack('H*', $ipPart)[1], 16, 2), 8, '0', STR_PAD_LEFT);
}
/* Добавляем 1 в нужном разряде двоичного представления строки "влоб" :) */
$i = $cidr - 1;
while ($i >= 0) {
if ($ipBin[$i] == '0') {
$ipBin[$i] = '1';
break;
} else {
$ipBin[$i] = '0';
}
$i--;
}
$ipBinParts = str_split($ipBin, 8);
foreach ($ipBinParts as $key => $ipBinPart) {
$ipParts[$key] = pack('H*', str_pad(base_convert($ipBinPart, 2, 16), 2, '0', STR_PAD_LEFT));
}
$nextIp = implode($ipParts);
if ($returnBin) {
return $nextIp;
} else {
return inet_ntop($nextIp);
}
}In output obtinemus praepositione proximae magnitudinis range certa in $cidr. Hoc munere stipites inscriptionum nostris clientibus collocamus.
Denique iniecta inscriptione pertinet ad ambitum. Exempli gratia, unum stipitem /48 sortiti sumus pro stipitibus distribuendis clientibus /64et nobis operam dare operam daremus, ut nos assignantes non excedant impedimentum datum (quod in praxi non mox fiet, sed adhuc est possibilitas). Omnia hic simplicia sunt. In binario forma principium et finem comprehendimus et vide num oratio intra fines sit.
function ipInRange ($ip, $rangeStart, $cidr) {
$start = getRangeBoundary($rangeStart, $cidr, 'start',false, true);
$end = getRangeBoundary($rangeStart, $cidr, 'end',false, true);
$ipBin = inet_pton($ip);
return ($ipBin >= $start && $ipBin <= $end);
}Spero hoc utile fuit. Quae alia munera ad conciones operandi utiles esse censent? Quaevis additamenta, commentationes et recensiones codicis in commentaria valde grata sunt.
Si clientis noster iam es vel cogitas de modo fieri unum, occasione publicationis huius articuli tibi offerimus ut truncum recipias. /64 omnino libera ab omnibus servitiis vps vel servientibus dedicatis in Centro Equinix Tier IV, Nederlandiam petentibus ad venditiones pertinentes, nexum huic articulum in tessera praebens. Oblatio valet usque ad diem Martii MMXX.
Quidam ads
Gratias tibi ago pro manendo nobiscum. Placetne tibi vasa nostra? Vis videre plus interesting contentus? Suscipe nos ponendo ordinem vel commendando amicos; , unicum analogum de ingressu servientibus, quod a nobis pro vobis est inventum: (praesto cum RAID1 et RAID10, usque ad 24 coros et usque ad 40GB DDR4).
Dell R730xd 2x vilius in Equinix Tier IV centri Amstelodami? Tantum hic in Belgio! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - from $99! Read about
Source: www.habr.com
