Как узнать входит ли IP в сетку

NeoLynx

Новичок
Как узнать входит ли IP в сетку

Уважамемы, вопрос не столько к php сколько к алгоритму, может кто сталкивался, или знает где посмотреть.

Есть у меня заранее введенные данные
сеть 192.168.1.0 маска 255.255.224.0

Как узнать входит ли в эту сеть IP адрес 192.168.25.25

?
 

NeoLynx

Новичок
2 neko, переменной части у сетки нет, например, адрес
192.168.25.25 еще в сетке, а 192.168.77.25 уже нет.

2 Tor хех, вот я тож к этому сколяюсь, но ничего не понимаю в вычислении масок и сеток.
Не попадались ли готовые срипты?
 

NeoLynx

Новичок
:)

-~{}~ 11.04.05 17:37:

Вот нашел, чуть дописал, красота, из коментов на www.php.net

function IP_Match($net, $mask, $ip) {

$bits=strpos(decbin(ip2long($mask)),"0");
$network_long=ip2long($net);
$mask_long= pow(2,32)-pow(2,(32-$bits));
$ip_long=ip2long($ip);

if (($ip_long & $mask_long) == $network_long) {
return 1;
} else {
return 0;
}
}

// usage
$net="200.100.50.0";
$mask="255.255.254.0";

$ip="200.100.51.55";
$ip2="200.100.52.2";

echo IP_Match($net, $mask, $ip); //prints 1
echo IP_Match($net, $mask, $ip2); //prints 0
 

netdog

net @
смотри в ману по [m]ip2long[/m] там в нотесах есть решение твоей задачи, ф-ии IP_match
 

netdog

net @
---
собсна я опаздал, ты и сам нашел ;)

-~{}~ 11.04.05 16:43:

neko ты че-то бредишь немного в этом топике, стринговыми функциями эту задачу не решишь как ты хотел и утвержал, что это совсем не обязательно.
 

fixxxer

К.О.
Партнер клуба
ну можно и строковыми, но это через зад.
впрочем, приведенная IP_Match - не менее через зад.
 

neko

tеam neko
дык он строковыми и сделал, ты посмотри внимательно ;-)
 

neko

tеam neko
PHP:
	function IP_Match( $net, $mask, $ip )
	{
		$mask = ip2long($mask);
		return (ip2long($ip) & $mask) == (ip2long($net) & $mask);
	}
-~{}~ 11.04.05 18:05:

слушайте почему эта вставка пхп кода сжирает первую табуляцию
 
Сверху