| @@ 90-101 (lines=12) @@ | ||
| 87 | * @param int $maskBits |
|
| 88 | * @return string |
|
| 89 | */ |
|
| 90 | private function getIPv4Subnet($ip, |
|
| 91 | $maskBits = 32) { |
|
| 92 | $binary = \inet_pton($ip); |
|
| 93 | for ($i = 32; $i > $maskBits; $i -= 8) { |
|
| 94 | $j = \intdiv($i, 8) - 1; |
|
| 95 | $k = (int) \min(8, $i - $maskBits); |
|
| 96 | $mask = (0xff - ((pow(2, $k)) - 1)); |
|
| 97 | $int = \unpack('C', $binary[$j]); |
|
| 98 | $binary[$j] = \pack('C', $int[1] & $mask); |
|
| 99 | } |
|
| 100 | return \inet_ntop($binary).'/'.$maskBits; |
|
| 101 | } |
|
| 102 | ||
| 103 | /** |
|
| 104 | * Return the given subnet for an IPv6 address and mask bits |
|
| @@ 110-120 (lines=11) @@ | ||
| 107 | * @param int $maskBits |
|
| 108 | * @return string |
|
| 109 | */ |
|
| 110 | private function getIPv6Subnet($ip, $maskBits = 48) { |
|
| 111 | $binary = \inet_pton($ip); |
|
| 112 | for ($i = 128; $i > $maskBits; $i -= 8) { |
|
| 113 | $j = \intdiv($i, 8) - 1; |
|
| 114 | $k = (int) \min(8, $i - $maskBits); |
|
| 115 | $mask = (0xff - ((pow(2, $k)) - 1)); |
|
| 116 | $int = \unpack('C', $binary[$j]); |
|
| 117 | $binary[$j] = \pack('C', $int[1] & $mask); |
|
| 118 | } |
|
| 119 | return \inet_ntop($binary).'/'.$maskBits; |
|
| 120 | } |
|
| 121 | ||
| 122 | /** |
|
| 123 | * Return the given subnet for an IP and the configured mask bits |
|