【发布时间】:2010-10-10 09:25:23
【问题描述】:
类似
SELECT COUNT(*) AS c FROM BANS WHERE typeid=6 AND (SELECT ipaddr,cidr FROM BANS) MATCH AGAINST 'this_ip';
因此,您不必先从数据库中获取所有记录,然后逐个匹配它们。
如果 c > 0 则匹配。
BANS 表:
id int auto incr PK
typeid TINYINT (1=hostname, 4=ipv4, 6=ipv6)
ipaddr BINARY(128)
cidr INT
host VARCHAR(255)
数据库:MySQL 5
查询时知道 IP 和 IPv 类型(4 或 6)。
IP 是例如 ::1 的二进制格式
BANNED IP 例如 ::1/64
【问题讨论】:
-
raspi,我知道这个问题很老,但是......你的 cidr 列是网络掩码中的一位数,所以对于 ipv6,它总是 64,对于 ipv4,它是一个介于0和32?虽然我想 0 会禁止所有地址... :)
标签: mysql ip mask bitmask cidr