一 、简介
ipmatcher是由api7组织出品的一款高性能IP匹配库,同时支持IPV6及CIDR模式。我们在编写防火墙时常需要对IP匹配黑白名单操作,可以使用该库快速获取到命中信息。
该项目地址:GitHub - api7/lua-resty-ipmatcher: High-performance match IP address for Nginx + Lua
二、使用方法
1.简单匹配IP是否在IP地址列表内:
local ipmatcher = require("resty.ipmatcher")
local ip = ipmatcher.new({
"127.0.0.1",
"192.168.0.0/16",
"::1",
"fe80::/32",
})
ngx.say(ip:match("127.0.0.1"))
ngx.say(ip:match("192.168.1.100"))
ngx.say(ip:match("::1"))
该操作将返回IP是否存在table内。
2.任意字段的hash table匹配:
local ip, err = ipmatcher.new_with_value({
["127.0.0.1"] = {info = "a"},
["192.168.0.0/16"] = {info = "b"},
})
local data, err = ip:match("192.168.0.1")
print(data.info) -- the value is "b"
new_with_valu