lua高性能IP匹配库ipmatcher

一 、简介

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_value方法中,table为hash map,其中map内字段可以任意定义。当我们想匹配某个IP是否在黑白名单内时,可以直接将IP的操作属性赋值在map内。

3.其他方便工具类:

syntax: res = ipmatcher.parse_ipv4(ip)

尝试将 IPv4 地址解析为主机字节顺序 FFI uint32_t 类型整数。

syntax: res = ipmatcher.parse_ipv6(ip)

尝试将 IPv6 地址解析为具有四个主机字节顺序 FFI uint32_t 类型整数的表。

4.注意事项:

如果匹配多个CIDR模式的IP列表,ip 地址可以满足多个 CIDR 范围,则返回值未定义(取决于内部实现)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值