我有一个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'