假设前段传下来的IP地址格式是合法的。
IP合法性判断:
xxx.xxx.xxx.xxx == > ip1.ip2.ip3.ip4
1.ip1的范围必须在[1,223]之间
2.IP不能为广播地址
步骤:
1.先判断子网掩码的合法性。
将子网掩码拆分成二进制形式表示的字符串
如255.255.254.0的二进制表示
11111111 11111111 11111110 00000000
左边的’1’中不能有0,右边的’0’中不能有1
2.判断IP的前8位是否在[1,223]之间, 如果不在范围内,则报错。
3.判断IP是否是广播地址
IP地址的与子网掩码相与,如果刚好等于255.255.255.255,则说明是广播地址,报错。
-- 查找.
local function finddot(str)
local DOT = string.byte('.')
local len = string.len(str)
local i = 1
while i < len
do
local ch = string.sub(str, i, i)
local ch_by = string.byte(ch)
if ch_by == DOT then
return i
end
i = i + 1
end
return nil
end
-- 拆分IP地址
local function split_ipaddr(ipaddr)
local ip_tbl = {
}
if type(ipaddr) ~= "string" then
return nil
end
while true
do
local pos = finddot(ipaddr)
if pos ~= nil then
local ip = string.sub(ipaddr, 0, pos - 1)
if ip ~= nil and ip ~= "" then
local ip_num = tonumber(ip)
table.insert