CREATE FUNCTION long2ip (ip INT UNSIGNED)
RETURNS TEXT DETERMINISTIC
RETURN CONCAT(FLOOR(ip/(256*256*256)), '.', (FLOOR(ip/(256*256)))%256, '.', (FLOOR(ip/256))%256, '.', ip%256);
CREATE FUNCTION ip2long (ip TEXT)
RETURNS INT UNSIGNED DETERMINISTIC
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE r INT UNSIGNED DEFAULT 0;
DECLARE p INT UNSIGNED DEFAULT 0;
WHILE i <= LENGTH(ip) DO
IF SUBSTRING(ip, i, 1) = '.' THEN
SET r = r * 256+p;
SET p = 0;
ELSE
SET p = p*10 + ASCII(SUBSTRING(ip, i, 1)) - ASCII('0');
END IF;
SET i = i + 1;
END WHILE;
RETURN r*256+p;
END