Mam tabelę zakresów adresów IP i muszę wygenerować listę sieci do odrzucenia dla określonego kraju.Wybierz CIDR z zakresu IP w MySQL
Dzięki temu mogę wygenerować listę zakresów IP z mojej bazy danych.
SELECT
ip_from,
Inet_ntoa(ip_from),
ip_to,
Inet_ntoa(ip_to)
FROM
ip_address_data
WHERE
country_code = 'XX'
LIMIT 1
który generuje ten wynik
ip_from inet_ntoa(ip_from) ip_to inet_ntoa(ip_to)
16777472 1.0.1.0 16778239 1.0.3.255
Ale muszę to wyjście w formacie CIDR i czasami zakres będzie więcej niż jeden wiersz zwrócony w takim stanie.
1.0.1.0/24
1.0.2.0/23
Czy istnieje sposób dynamicznego generowania tych przy użyciu instrukcji select? Ta składnia byłaby niesamowita, ale zakładam, że będzie to procedura składowana, jeśli ma zwrócić więcej niż jeden wiersz wyjściowy na wiersz wejściowy.
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'
dlaczego upadł? Twój powód nie działa. Nie szukam opinii, to jest prosty problem matematyczny, z którym potrzebuję pomocy. – jbrahy
Ta rozmowa może pomóc http://stackoverflow.com/questions/595748/is-there-way-to-match-ip-with-ipcidr-straight-z-select-query?rq=1 –