lua-resty-iputils

在 Openresty 中处理 IP 地址的实用程序函数

$ opm get p0pr0ck5/lua-resty-iputils

#lua-resty-iputils

用于处理 IP 地址的实用程序函数集合。

#概述

    init_by_lua '
      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 '
        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)

重复调用此方法将重置缓存

请注意,lrucache 在调用 binip_in_cidrs 时不会被使用

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 和错误消息

##TODO

作者

Robert Paprocki (p0pr0ck5)

许可证

gpl3

版本