mySQL计算IP地址范围

mySQL计算IP地址范围,第1张

mySQL计算IP地址范围(掩码16-30位)

DELIMITER //

CREATE PROCEDURE IPJS(IN ipadd VARCHAR(16) , IN mask INT )

BEGIN

 DECLARE i INT DEFAULT 0 ;

 DECLARE k INT DEFAULT 0 ;

 DECLARE l INT DEFAULT 0 ;
 
 DECLARE x INT DEFAULT 0 ;

 DECLARE y INT DEFAULT 0 ;

 DECLARE z INT DEFAULT 0 ;

 
 IF INET_ATON(ipadd) IS NULL &&  mask > 30 THEN SELECT 'IP格式不正确或掩码错误' ;

 ELSEIF INET_ATON(ipadd) IS NOT NULL  

 THEN  

 SET i = INSTR(SUBSTRING_INDEX(ipadd , '.', -2) , '.')               ;

 SET k = SUBSTRING(SUBSTRING_INDEX(ipadd , '.', -2), 1 , i-1)        ;  
 
 SET l = SUBSTRING(SUBSTRING_INDEX(ipadd , '.', -2), i+1 , i+3)      ;

 SET x = SUBSTRING_INDEX(ipadd , '.', 1)                             ;

 SET y = SUBSTRING_INDEX(SUBSTRING_INDEX(ipadd , '.', -3) , '.', 1)  ;      
     


       IF mask  = 24 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (0&l)+1 , '-' ,x,'.',y,'.',k , '.' , 255-1) as 'IP所属地址范围 '              ;

       ELSEIF mask  = 25 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (128&l)+1 , '-' ,x,'.',y,'.',k , '.' ,(128&l)+126 ) as 'IP所属地址范围 '  ;
        
       ELSEIF mask  = 26 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (192&l)+1 , '-' ,x,'.',y,'.',k , '.' ,(192&l)+62 ) as 'IP所属地址范围 '   ;

       ELSEIF mask  = 27 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (224&l)+1 , '-' ,x,'.',y,'.',k , '.' ,(224&l)+30 ) as 'IP所属地址范围 '   ;

       ELSEIF mask  = 28 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (240&l)+1 , '-' ,x,'.',y,'.',k , '.' ,(240&l)+14 )as 'IP所属地址范围 '    ;
       
       ELSEIF mask  = 29 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (248&l)+1 , '-' ,x,'.',y,'.',k , '.' ,(248&l)+6 ) as 'IP所属地址范围 '    ;

       ELSEIF mask  = 30 THEN SELECT CONCAT( x,'.',y,'.',k , '.' , (252&l)+1 , '-' ,x,'.',y,'.',k , '.' ,(252&l)+2) as 'IP所属地址范围 '  ;

       
       ELSEIF mask  = 16 THEN SELECT CONCAT( x,'.',y,'.',0&k , '.' , 1 , '-' ,x,'.',y,'.',255 , '.' ,254 ) as 'IP所属地址范围 '              ;
        
       ELSEIF mask  = 17 THEN SELECT CONCAT( x,'.',y,'.',128&k , '.' , 1 , '-' ,x,'.',y,'.',(128&k)+127, '.' ,254) as 'IP所属地址范围 '      ;
  
       ELSEIF mask  = 18 THEN SELECT CONCAT( x,'.',y,'.',192&k , '.' , 1 , '-' ,x,'.',y,'.',(192&k)+63 , '.' ,254) as 'IP所属地址范围 '      ;

       ELSEIF mask  = 19 THEN SELECT CONCAT( x,'.',y,'.',224&k , '.' , 1 , '-' ,x,'.',y,'.',(224&k)+31 , '.' ,254) as 'IP所属地址范围 '      ;

       ELSEIF mask  = 20 THEN SELECT CONCAT( x,'.',y,'.',240&k , '.' , 1 , '-' ,x,'.',y,'.',(240&k)+15 , '.' ,254) as 'IP所属地址范围 '      ;

       ELSEIF mask  = 21 THEN SELECT CONCAT( x,'.',y,'.',248&k , '.' , 1 , '-' ,x,'.',y,'.',(248&k)+7 , '.' ,254) as 'IP所属地址范围 '       ;

       ELSEIF mask  = 22 THEN SELECT CONCAT( x,'.',y,'.',252&k , '.' , 1 , '-' ,x,'.',y,'.',(252&k)+3 , '.' ,254) as 'IP所属地址范围 '       ;
       
       ELSEIF mask  = 23 THEN SELECT CONCAT( x,'.',y,'.',254&k , '.' , 1 , '-' ,x,'.',y,'.',(254&k)+1 , '.' ,254) as 'IP所属地址范围 '       ;

       END IF ;

 END IF;

END //

DELIMITER ;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/989520.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存