|
|
|
| Нашёл в сети такой код:
<?php
function netMatch ($CIDR,$IP) {
list ($net, $mask) = explode ('/', $CIDR);
return ( ip2long ($IP) & ~((1 << (32 - $mask)) - 1) ) == ip2long ($net);
}
var_dump(netMatch('127.0.0.0/16','127.0.0.51'));
|
для проверки принадлежности множеству адресов, порождаемого CIDR-методом (может заумно сказал, но смысл, наверное, ясен).
Я вот не уверен, что код правильный! Меня смущает, что в правой части равенства просто ip2long ($net), то есть мы не "эндим" это число с маской подсети. Может я не совсем точно понимаю смысл IP-адреса слева от слеша: 127.0.0.0/16. Мне кажется, что это любой адрес из этого же множества. Кто не прав? | |
|
|
|
|
автор: . (06.07.2009 в 00:08) |
|
|
для: Sega
(05.07.2009 в 23:43)
| | Это начальный адрес, а не любой. У него всегда будут нули на конце (в двоичном виде), поэтому "эндить" не имеет смысла. | |
|
|
|
|
|
|
|
для: Sega
(05.07.2009 в 23:43)
| | Только адрес сети.
Хотите ставить любой - добавляйте & в правую часть. | |
|
|
|