欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lua-resty-iputils, 在Openresty中,用于处理IP地址的实用程序函数

程序员文章站 2022-07-10 17:39:37
...

 

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

syntax: ok, err = iputils.enable_lrucache(size?)

创建一个全局LruCache对象用于缓存ip2bin查找。

大小是可选的,默认值为 4000条( 每个工作线程 ~1MB )

反复调用将重置缓存

ip2bin

syntax: bin_ip, bin_octets = iputils.ip2bin(ip)

返回IPv4地址和包含每个八位字节的二进制表示形式的表的二进制表示。

返回错误消息的nil 和错误消息

parse_cidr

syntax: lower, upper = iputils.parse_cidr(cidr)

返回IPv4网络最低( 网络) 和最高( 广播) 地址的二进制表示形式。

parse_cidrs

syntax: parsed = iputils.parse_cidrs(cidrs)

获取一个表格格式的IPV4网络表,并返回一个表格containg的表格,下面的地址。

如果表中存在无效网络,则记录错误并返回其他网络

ip_in_cidrs

syntax: bool, err = iputils.ip_in_cidrs(ip, cidrs)

获取一个字符串IPv4地址和一个已经解析的CIDRs表( 比如。 来自 iputils.parse_cidrs )。

如果IP中存在 IP,则返回一个 true 或者 false ;指定的网络的任何子节点。

返回 nil 和带有无效IP的错误消息

binip_in_cidrs

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

待办事项