







|
MySQL.RU - Webboard
Вернуться
Функция на mysql 5.0.18 (Igorek) 02/03/2006 - 14:35:01
From: Igorek - 02/03/2006 - 14:35:01
Subject:Функция на mysql 5.0.18
-----------------
Есть функция на php
[code]
function net_match($network, $ip) {
// determines if a network in the form of 192.168.17.1/16 or
// 127.0.0.1/255.255.255.255 or 10.0.0.1 matches a given ip
$ip_arr = explode('/', $network);
$network_long = ip2long($ip_arr[0]);
$x = ip2long($ip_arr[1]);
$mask = long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 -
$ip_arr[1]);
$ip_long = ip2long($ip);
// echo ">".$ip_arr[1]."> ".decbin($mask)."\n";
return ($ip_long & $mask) == ($network_long & $mask);
}
[/code]
Хочеться ее сделать на mysql - я делаю, так но у меня проблема с отдачей маски подсети.
(функция не дописана)
DROP FUNCTION IF EXISTS net_match;
delimiter '/';
CREATE FUNCTION net_match(network varchar(32), ip varchar(16)) returns varchar(32)
begin
declare network_long bigint;
declare x varchar(16);
declare x1 bigint;
declare mask varchar(32);
declare ip_long bigint;
set ip_long=INET_ATON(ip);
set network_long=INET_ATON(SUBSTRING_INDEX(network,'/',1));
if LOCATE('/',network)!=0
then set x=trim(SUBSTRING_INDEX(network,'/',-1));
set x1=INET_ATON(x);
else set x='0';
set x1=0;
end if;
if (x=INET_NTOA(x1))
then set mask=x1;
else set mask=CONV('FFFFFFFF',16,10) << (32 - x1);
end if;
return mask;
end;
/
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
26757
|
|