如何判断 IPv4 地址是内网地址
下面是 OpenResty 的一个片段代码,用于展示如何判断一个 IP 地址是否是内网地址。
这个比通过字符串判断是否是 127.
10.
172.16. ~ 172.31.
192.168.
的这些网段高效多了。
1
2
3
4
5
6
7
8
9
10
11
local bit_and = require "bit".band
local addr = ngx.var.binary_remote_addr
local fb = string.byte(addr, 1)
local sb = string.byte(addr, 2)
if #addr == 4 and (fb == 10
or fb == 127
or (fb == 172 and bit_and(sb, 0xFF) == 16)
or (fb == 192 and sb == 168)) then
ngx.say("it is local")
end