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 存在于任何指定的网络中,则返回 truefalse

对于无效的 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 存在于任何指定的网络中,则返回 truefalse

对于无效的 IP 地址,返回 nil 和错误消息。

待办事项

作者

Hamish Forbes

许可证

mit

依赖项

luajit

版本