私はIP範囲のテーブルを持っており、特定の国で拒否するネットワークのリストを生成する必要があります。MySQLのIP範囲からCIDRを選択
私はこれを使用して私のdbからのIP範囲のリストを生成することができます。この結果
ip_from inet_ntoa(ip_from) ip_to inet_ntoa(ip_to)
16777472 1.0.1.0 16778239 1.0.3.255
を生成しかし、私はCIDR形式でその出力を必要とし、時には範囲が複数の行は次のように返される
SELECT
ip_from,
Inet_ntoa(ip_from),
ip_to,
Inet_ntoa(ip_to)
FROM
ip_address_data
WHERE
country_code = 'XX'
LIMIT 1
。
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 –