我有一個IP範圍表,我需要生成一個拒絕特定國家的網絡列表。從MySQL的IP範圍中選擇CIDR
所以我可以使用這個從我的數據庫生成一個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'
爲什麼downvote?你的理由不起作用。我不是在尋找意見,這是一個簡單的數學問題,我需要幫助。 – jbrahy
此對話可能有助於http://stackoverflow.com/questions/595748/is-there-way-to-match-ip-with-ipcidr-straight-from-select-query?rq=1 –