从MySQL中的IP范围中选择CIDR

时间:2017-05-08 17:17:57

标签: mysql ip

我有一个IP范围表,我需要生成一个拒绝特定国家/地区的网络列表。

所以我可以用我的数据库生成一个ip范围列表。

SELECT 
       ip_from, 
       Inet_ntoa(ip_from), 
       ip_to, 
       Inet_ntoa(ip_to) 
FROM   
       ip_address_data 
WHERE  
       country_code = 'XX' 
LIMIT 1

生成此结果

ip_from     inet_ntoa(ip_from)  ip_to       inet_ntoa(ip_to)
16777472    1.0.1.0             16778239    1.0.3.255

但是我需要CIDR格式的输出,有时范围会像这样返回多行。

1.0.1.0/24
1.0.2.0/23

有没有办法使用select语句动态生成这些?这种语法很棒但是我假设它必须是一个存储过程,如果它将为每个输入行返回多个输出行。

SELECT  
    CONCAT('/sbin/route add -net ', CONVERT_TO_CIDR(ip_from,ip_to), ' reject;') AS command
FROM
    ip_info.ip_address_data
WHERE 
    country_code='XX'

1 个答案:

答案 0 :(得分:3)

这是一个进行转换的python脚本。只需要将其转换为存储过程。

Conversion from IP Range to CIDR Mask