do local function splittail(tsrc, tsubstr, tlist) local t_strat = 0; local t_end = 0; local tail = ''; local first = ''; t_start, t_end = string.find(tsrc, tsubstr); first = string.sub(tsrc, 0, t_start - 1); tail = string.sub(tsrc, t_end + 1); table.insert(tlist, first); t_start = nil; t_end = nil; t_start, t_end = string.find(tail, tsubstr); if t_start ~= nil then splittail(tail, tsubstr, tlist); else table.insert(tlist, tail); return tlist; end end local function split(str, substr) local pos_start = nil; local pos_end = nil; local list = {}; local tail = ''; pos_start, pos_end = string.find(str, substr); if pos_start == nil then return nil; else first = string.sub(str, 0, pos_start - 1); table.insert(list, first); tail = string.sub(str, tonumber(pos_end) + 1); pos_start = nil; pos_end = nil; pos_start, pos_end = string.find(tail, substr); if pos_start == nil then table.insert(list, tail); return list; else splittail(tail, substr, list); return list; end end end local function m8bin(x) result = ''; while x > 0 do mod = x % 2; x, y = math.modf(x / 2); result = tostring(mod) .. result; end prepos = (8 - string.len(result)); while prepos > 0 do result = '0' .. result; prepos = prepos - 1; end return result; end local function ip2bin(ip) slist = split(ip, '%.'); if slist ~= nil then ip1 = m8bin(tonumber(slist[1])); ip2 = m8bin(tonumber(slist[2])); ip3 = m8bin(tonumber(slist[3])); ip4 = m8bin(tonumber(slist[4])); res = ip1 .. ip2 .. ip3 .. ip4; return res; else return nil; end end tool = { splittail = splittail, split = split, m8bin = m8bin, ip2bin = ip2bin, } end