复制代码
git://www.github.com/hamishforbes/lua-resty-iputils.git
复制代码
git clone http://www.github.com/hamishforbes/lua-resty-iputils
复制代码
$ svn co --depth empty http://www.github.com/hamishforbes/lua-resty-iputils
Checked out revision 1.
$ cd repo
$ svn up trunk
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
}
方法
syntax: ok, err = iputils.enable_lrucache(size?)
创建一个全局LruCache对象用于缓存ip2bin查找。
大小是可选的,默认值为 4000条( 每个工作线程 ~1MB )
反复调用将重置缓存
syntax: bin_ip, bin_octets = iputils.ip2bin(ip)
返回IPv4地址和包含每个八位字节的二进制表示形式的表的二进制表示。
返回错误消息的nil
和错误消息
syntax: lower, upper = iputils.parse_cidr(cidr)
返回IPv4网络最低( 网络) 和最高( 广播) 地址的二进制表示形式。
syntax: parsed = iputils.parse_cidrs(cidrs)
获取一个表格格式的IPV4网络表,并返回一个表格containg的表格,下面的地址。
如果表中存在无效网络,则记录错误并返回其他网络
syntax: bool, err = iputils.ip_in_cidrs(ip, cidrs)
获取一个字符串IPv4地址和一个已经解析的CIDRs表( 比如。 来自 iputils.parse_cidrs
)。
如果IP中存在 IP,则返回一个 true
或者 false
;指定的网络的任何子节点。
返回 nil
和带有无效IP的错误消息
syntax: bool, err = iputils.binip_in_cidrs(bin_ip, cidrs)
获取 Nginx 二进制IPv4地址( 比如。 ngx.var.binary_remote_addr
) 和解析的CIDRs表( 比如。 来自 iputils.parse_cidrs
)。
如果所检查的IP已经作为二进制表示形式可用,这里方法比 ip_in_cidrs()
快得多。
如果IP中存在 IP,则返回一个 true
或者 false
;指定的网络的任何子节点。
返回 nil
和带有无效IP的错误消息