29 lines
936 B
Lua
Executable File
29 lines
936 B
Lua
Executable File
#!/usr/bin/env lua
|
|
local bit = require("bit")
|
|
|
|
function fix_subnet(subnet)
|
|
local _, _, i1, i2, i3, i4, len = string.find(arg[1], '^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\/([0-9]+)$')
|
|
if i1 then
|
|
len = tonumber(len)
|
|
i1 = tonumber(i1)
|
|
i2 = tonumber(i2)
|
|
i3 = tonumber(i3)
|
|
i4 = tonumber(i4)
|
|
if len >= 32 then
|
|
return string.format("%d.%d.%d.%d/%d", i1, i2, i3, i4, 32)
|
|
elseif len >= 24 then
|
|
return string.format("%d.%d.%d.%d/%d", i1, i2, i3, bit.lshift(bit.rshift(i4, 32 - len), 32 - len), len)
|
|
elseif len >= 16 then
|
|
return string.format("%d.%d.%d.%d/%d", i1, i2, bit.lshift(bit.rshift(i3, 24 - len), 24 - len), 0, len)
|
|
elseif len >= 8 then
|
|
return string.format("%d.%d.%d.%d/%d", i1, bit.lshift(bit.rshift(i2, 16 - len), 16 - len), 0, 0, len)
|
|
else
|
|
return string.format("%d.%d.%d.%d/%d", bit.lshift(bit.rshift(i1, 8 - len), 8 - len), 0, 0, 0, len)
|
|
end
|
|
end
|
|
return subnet
|
|
end
|
|
|
|
|
|
print(fix_subnet(arg[1]))
|