lua-resty-iputils
用于处理 IP 地址的实用函数集合。
$ opm get hamishforbes/lua-resty-iputils
lua-resty-iputils
用于处理 IP 地址的实用函数集合。
概览
init_by_lua_block {
local iputils = require("resty.iputils")
iputils.enable_lrucache()
local whitelist_ips = {
"127.0.0.1",
"10.10.10.0/24",
"192.168.0.0/16",
}
-- WARNING: Global variable, recommend this is cached at the module level
-- https://github.com/openresty/lua-nginx-module#data-sharing-within-an-nginx-worker
whitelist = iputils.parse_cidrs(whitelist_ips)
}
access_by_lua_block {
local iputils = require("resty.iputils")
if not iputils.ip_in_cidrs(ngx.var.remote_addr, whitelist) then
return ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
方法
enable_lrucache
语法: ok, err = iputils.enable_lrucache(size?)
创建用于缓存 ip2bin 查询的全局 lrucache 对象。
大小是可选的,默认值为 4000 个条目(每个工作进程约 1MB)。
重复调用此函数将重置缓存。
ip2bin
语法: bin_ip, bin_octets = iputils.ip2bin(ip)
返回 IPv4 地址的二进制表示形式和包含每个八位字节的二进制表示形式的表。
对于无效的 IP 地址,返回 nil
和错误消息。
parse_cidr
语法: lower, upper = iputils.parse_cidr(cidr)
返回 IPv4 网络的最低(网络)和最高(广播)地址的二进制表示形式。
parse_cidrs
语法: parsed = iputils.parse_cidrs(cidrs)
接受一个包含 CIDR 格式 IPv4 网络的表,并返回一个包含包含最低和最高地址的表的表。
如果表中包含无效的网络,则记录错误,并返回其他网络。
ip_in_cidrs
语法: bool, err = iputils.ip_in_cidrs(ip, cidrs)
接受一个字符串 IPv4 地址和一个包含已解析 CIDR 的表(例如来自 iputils.parse_cidrs
)。
如果 IP 存在于任何指定的网络中,则返回 true
或 false
。
对于无效的 IP 地址,返回 nil
和错误消息。
binip_in_cidrs
语法: bool, err = iputils.binip_in_cidrs(bin_ip, cidrs)
接受一个 nginx 二进制 IPv4 地址(例如 ngx.var.binary_remote_addr
)和一个包含已解析 CIDR 的表(例如来自 iputils.parse_cidrs
)。
如果要检查的 IP 地址已经以二进制表示形式提供,则此方法比 ip_in_cidrs()
快得多。
如果 IP 存在于任何指定的网络中,则返回 true
或 false
。
对于无效的 IP 地址,返回 nil
和错误消息。
待办事项
IPv6 支持 - 支持 ipv6 的备用库 - lua-libcidr-ffi
作者
Hamish Forbes
许可证
mit
依赖项
luajit
版本
-
用于处理 IP 地址的实用函数集合。 2017-03-28 15:10:00
-
用于处理 IP 地址的实用函数集合。 2016-10-03 09:17:39