ΠΠ΅Π΄Π°Π²Π½ΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΡΠ°ΡΡΡ LIR ΠΈ /29 Π±Π»ΠΎΠΊ IPv6. Π ΡΠ»Π΅Π΄ΠΎΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²Π΅ΡΡΠΈ ΡΡΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠ΅ΠΉ. Π ΠΊΠΎΠ»Ρ ΡΠΊΠΎΡΠΎ Π½Π°Ρ Π±ΠΈΠ»Π»ΠΈΠ½Π³ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° PHP, ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΡΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ ΠΈ ΠΎΡΠΎΠ·Π½Π°ΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΡΠ·ΡΠΊ β Π½Π΅ ΡΠ°ΠΌΡΠΉ Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½ΡΠΉ Π² ΠΏΠ»Π°Π½Π΅ ΡΠ°Π±ΠΎΡΡ Ρ IPv6. ΠΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ β Π½Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΡΠΈΡ Π·Π°Π΄Π°Ρ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΡΠ°ΠΌΠΎΠ΅ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΠ΅, Π½ΠΎ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ
ΠΠΈΡΠΊΠ»Π΅ΠΉΠΌΠ΅Ρ. ΠΡΠ»ΠΈ ΠΡ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ IPv6 ΠΈ Ρ ΡΠ΅ΠΌ Π΅Π³ΠΎ Π΅Π΄ΡΡ, ΡΡΠ° ΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π»Ρ ΠΠ°Ρ ΡΠΊΡΡΠ½ΠΎΠΉ. ΠΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ Π±ΡΡΡ.
ΠΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΠΈΠ΄ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ IPv6, ΠΎΠ½Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΊΡΡΠ°ΠΆΠΈΡΡ. ΠΠΎΡΠ»Π΅ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΡ 64.233.177.101 ΠΌΡ Π²Π΄ΡΡΠ³ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ 2607:f8b0:4002:c08::8b ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΡΠ΅ΡΡΡΡΡΡ. Π ΡΠΎ, ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ β Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ 32 ΠΈ 128 Π±ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΡΠ±ΠΎΠΉ IP ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠΎ ΡΡΡΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΈΡΠ°. ΠΠ΅ Π²Π΄Π°Π²Π°ΡΡΡ Π΅ΡΡ Π³Π»ΡΠ±ΠΆΠ΅ Π² ΡΡΡΡΠΊΡΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π½Π°ΠΌ ΠΎΡΡΡΠ΄Π° Π½ΡΠΆΠ½ΠΎ Π²ΡΠ½Π΅ΡΡΠΈ ΠΎΠ΄Π½ΠΎ: Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ IP-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΡ ΠΈ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π₯ΡΠ°Π½ΠΈΡΡ Π² Π±Π°Π·Π΅ ΠΈΡ ΡΠΎΠΆΠ΅ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠ°ΠΊ BINARY(4) Π΄Π»Ρ IPv4 ΠΈ BINARY(16) Π΄Π»Ρ IPv6.
ΠΡΡ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½ΡΠΉ Π°ΡΠΏΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΠ»ΠΎ Π±Ρ Π·Π°ΡΡΠΎΠ½ΡΡΡ, β ΡΡΠΎ ΠΌΠ°ΡΠΊΠΈ ΡΠ΅ΡΠΈ ΠΈ CIDR Π½ΠΎΡΠ°ΡΠΈΡ. CIDR β Π°ΠΊΡΠΎΠ½ΠΈΠΌ ΠΎΡ Classless Inter-Domain Routing (
Π ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΏΠΎΠ½ΡΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ip.add.re.ss/cidr. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 64.233.177.0/24 ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ 24 Π±ΠΈΡΠ° ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΏΡΠ΅ΡΠΈΠΊΡΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 8 Π±ΠΈΡ, ΠΎΠ½ΠΈ ΠΆΠ΅ β ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠΈΡΠ»ΠΎ Π² ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ Π°Π΄ΡΠ΅ΡΡ Π²Π½ΡΡΡΠΈ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ. ΠΡΡ ΠΏΠ°ΡΡ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ. 64.233.177.101/32 ΠΈ 2607:f8b0:4002:c08::8b/128 β ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ. 2607:f8b0:4002:c08::/64 β ΠΏΠ΅ΡΠ²ΡΠ΅ 64 Π±ΠΈΡΠ° (ΠΏΠ΅ΡΠ²ΡΠ΅ 4 Π³ΡΡΠΏΠΏΡ) β ΠΏΡΠ΅ΡΠΈΠΊΡ, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ 64 Π±ΠΈΡΠ° β Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ. ΠΡΡΠ°ΡΠΈ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ³ΠΎ ΡΠΌΡΡΠ°Π΅Ρ "::" Π² Π·Π°ΠΏΠΈΡΠΈ, Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΠΈΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ 0. ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ 1 ΡΠ°Π·. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, 2607:f8b0:4002:c08::8b = 2607:f8b0:4002:c08:0:0:0:8b.
Π§ΡΠΎ Π½Π°ΠΌ ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΠΏΠ½ΡΡΡ? ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΡ
AND ΠΈ OR, Π·Π½Π°Ρ ΠΌΠ°ΡΠΊΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠΎ-Π²ΡΠΎΡΡΡ
, ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° (Ρ.Π΅. Ρ CIDR) n ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ, ΠΏΡΠΈΠ±Π°Π²ΠΈΠ² 1 ΠΊ n-ΡΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ. ΠΠΎΠ΄ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ Π²ΠΈΠ΄ΠΎΠΌ Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ pack() ΠΈ inet_pton() ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ°ΠΠ΅ΡΠΊΠ»Π°ΡΡΠΎΠ²ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° ΠΊΠ»Π°ΡΡΠΎΠ²Π°Ρ ΡΠ΅Π³ΡΠ΅Π³Π°ΡΠΈΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ. Π ΡΠ΅ Π΄Π°Π»ΡΠΊΠΈΠ΅ Π³ΠΎΠ΄Ρ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π», ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, ΡΠ°Π·Π΄Π°Π²Π°Π»ΠΈ ΠΈΡ
Π½Π°ΠΏΡΠ°Π²ΠΎ ΠΈ Π½Π°Π»Π΅Π²ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ: ΠΊΠ»Π°ΡΡ Π β ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠ΅ 8 Π±ΠΈΡ (Ρ.Π΅. ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ), Ρ Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΠΌ Π±ΠΈΡΠΎΠΌ 0; ΠΊΠ»Π°ΡΡ Π β ΠΏΠ΅ΡΠ²ΡΠ΅ 16 (ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΠΈΡΠ»Π°), Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΠ΅ Π±ΠΈΡΡ 10; ΠΊΠ»Π°ΡΡ Π‘ β ΠΏΠ΅ΡΠ²ΡΠ΅ 24 Π±ΠΈΡΠ°, Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΠ΅ Π±ΠΈΡΡ 110. ΠΡΠΈ ΡΠ°ΠΌΡΠ΅ Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΠ΅ Π±ΠΈΡΡ Π·Π°Π΄Π°Π²Π°Π»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π²ΡΠ΄Π°Π²Π°Π»ΡΡ Π°Π΄ΡΠ΅Ρ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°: 0.0.0.0 β 127.255.255.255 Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Π, 128.0.0.0 β 191.255.255.255 β ΠΊΠ»Π°ΡΡ Π, 192.0.0.0 β 223.255.255.255 β ΠΊΠ»Π°ΡΡ Π‘. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π·Π°Π»ΡΡ ΠΏΠΎ ΠΏΠ»Π°Π½Π΅ΡΠ΅, ΡΠ΅Π³ΡΠ»ΡΡΠΎΡΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΠΏΡΠΎΠΌΠ°Ρ
Π½ΡΠ»ΠΈΡΡ, ΠΈ Π² Π½Π°ΡΠ°Π»Π΅ 90-Ρ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π±Π΅ΡΠΊΠ»Π°ΡΡΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ²ΡΡΡ Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊ Π»ΠΈΠ΄ΠΈΡΡΡΡΠΈΠΌ Π±ΠΈΡΠ°ΠΌ. Π§ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠ΅ΡΠΏΠ½ΡΡΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π²
ΠΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΡΠ΅, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π·Π°Π΄Π°ΡΠΈ:
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°;
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° (CIDR);
- ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄Π»Ρ IPv6, Π½ΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ΄Π΅ΠΈ Ρ ΠΏΠΎΡΠ΅ΡΠΏΠ½ΡΠ»
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π», ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°Π΄ΡΠ΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π·Π½Π°Ρ Π½Π°ΡΠ°Π»ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΠΌΠ°ΡΠΊΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ CIDR Π² Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΠΌΠ°ΡΠΊΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±Π΅ΡΡΠΌ Π΅Ρ hex ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠ°ΠΊΡΠ΅ΠΌ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ΅.
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);
}
ΠΡΠ·ΠΎΠ² pack(‘H*’, $mask) ΠΏΠ°ΠΊΡΠ΅Ρ hex ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ inet_pton(). Π‘ ΡΠΎΠΉ Π»ΠΈΡΡ ΡΠ°Π·Π½ΠΈΡΠ΅ΠΉ, ΡΡΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ pack() Π²ΡΠ΅ 0 Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π° ΡΠ²ΠΎΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ , Π° Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠΉ Π² Π·Π°ΠΏΠΈΡΠΈ Π±ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π Π²ΠΎΡ ΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ Π½ΡΠ°Π½ΡΡ. ΠΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π° ΠΌΠΎΡΠΌ 32-Π±ΠΈΡΠ½ΠΎΠΌ CubieTruck, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠΎΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ Π²ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π±Π°Π»ΠΎΠ²ΡΡΠ²Π°, Π²ΡΠ΅ 128 Π±ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π° ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ Π²ΡΠΉΠ΄Π΅Ρ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π½Π°ΠΌ ΡΠ°Π·Π±ΠΈΡΡ Π΅Π³ΠΎ Π½Π° Π³ΡΡΠΏΠΏΡ ΠΏΠΎ 32 Π±ΠΈΡΠ° (Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΡΠΎ Π·Π½Π°Π΅Ρ, Π½Π° ΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ).
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);
}
}
ΠΠ»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ IP ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠ°ΠΊ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ $which ΡΡΡ Π·Π°Π΄Π°ΡΡ, Ρ ΠΎΡΠΈΠΌ Π»ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°ΡΠ°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° (Π·Π½Π°ΡΠ΅Π½ΠΈΡ ‘start’ ΠΈΠ»ΠΈ ‘end’ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ).
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ Π·Π°Π΄Π°ΡΠ° (ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ½Π°Ρ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ) β Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. ΠΠ»Ρ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π»ΡΡΡΠ΅ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎ Π² Π³ΠΎΠ»ΠΎΠ²Ρ, ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ Π°Π΄ΡΠ΅Ρ Π² Π΄Π²ΠΎΠΈΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ 1 Π² Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΠ½ΡΡΡ Π²ΡΡ Π½Π°Π·Π°Π΄. Π§ΡΠΎΠ±Ρ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ², Ρ ΡΠ΅ΡΠΈΠ» ΠΏΡΠΈ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π΄ΡΠΎΠ±ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠΎ Π±Π°ΠΉΡΡ.
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);
}
}
ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² $cidr. ΠΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΌΡ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠΈ Π°Π΄ΡΠ΅ΡΠΎΠ² Π½Π°ΡΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π»ΠΈ Π°Π΄ΡΠ΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ Π²ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ Π±Π»ΠΎΠΊ /48 ΠΏΠΎΠ΄ ΡΠ°Π·Π΄Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π±Π»ΠΎΠΊΠΎΠ² /64, ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΠΌΡ Π½Π΅ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° (Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ Π½Π΅ΡΠΊΠΎΡΠΎ, Π½ΠΎ Π²ΡΡ ΠΆΠ΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π΅ΡΡΡ). Π’ΡΡ Π²ΡΡ ΠΏΡΠΎΡΡΠΎ. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½Π°ΡΠ°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ Π°Π΄ΡΠ΅Ρ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ .
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);
}
ΠΠ°Π΄Π΅ΡΡΡ, Π±ΡΠ»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. ΠΠ°ΠΊΠΈΠ΅ Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎ ΠΠ°ΡΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ? ΠΡΠ±ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΠΊΠΎΠ΄-ΡΠ΅Π²ΡΡ Π³ΠΎΡΡΡΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
ΠΡΠ»ΠΈ ΠΡ ΡΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ Π½Π°ΡΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΈΠΌ ΡΡΠ°ΡΡ, ΠΏΠΎ ΡΠ»ΡΡΠ°Ρ Π²ΡΡ ΠΎΠ΄Π° ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΌΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΠΠ°ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±Π»ΠΎΠΊ /64 ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ»ΡΠ³ vps ΠΈΠ»ΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π² Π΄Π°ΡΠ° ΡΠ΅Π½ΡΡΠ΅ Equinix Tier IV, ΠΠΈΠ΄Π΅ΡΠ»Π°Π½Π΄Ρ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ Π² ΠΎΡΠ΄Π΅Π» ΠΏΡΠΎΠ΄Π°ΠΆ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΡ ΡΡΠ°ΡΡΡ Π² ΡΠΈΠΊΠ΅ΡΠ΅. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π΄ΠΎ ΠΌΠ°ΡΡΠ° 2020-Π³ΠΎ Π³ΠΎΠ΄Π°.
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΡ π
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΠΎΡΡΠ°ΡΡΠ΅ΡΡ Ρ Π½Π°ΠΌΠΈ. ΠΠ°ΠΌ Π½ΡΠ°Π²ΡΡΡΡ Π½Π°ΡΠΈ ΡΡΠ°ΡΡΠΈ? Π₯ΠΎΡΠΈΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ
ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ²? ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΡΠ΅ Π½Π°Ρ, ΠΎΡΠΎΡΠΌΠΈΠ² Π·Π°ΠΊΠ°Π· ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π² Π·Π½Π°ΠΊΠΎΠΌΡΠΌ,
Dell R730xd Π² 2 ΡΠ°Π·Π° Π΄Π΅ΡΠ΅Π²Π»Π΅ Π² Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅ Equinix Tier IV Π² ΠΠΌΡΡΠ΅ΡΠ΄Π°ΠΌΠ΅? Π’ΠΎΠ»ΡΠΊΠΎ Ρ Π½Π°Ρ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com