Ti Modulo:IP iket maysa a libraria para iti panagobra kadagiti adres ti IP ken dagiti subnet. Makatengngel daytoy iti IPv4 ken IPv6. Mangieksport ti libraria kadagiti uppat a klase, IPAddress, Subnet, IPv4Collection, ken IPv6Collection.

Panangikarga ti libraria urnosen

local IP = require('Modulo:IP')
local IPAddress = IP.IPAddress
local Subnet = IP.Subnet

IPAddress urnosen

Ti klase ti IPAddress ket inus-usar iti panagobra kadagiti bugbugtong nga adres ti IP. Ti agpartuat iti maysa a baro a banag ti IPAddress:

local ipAddress = IPAddress.new(ipString)

Ti agdumaduma nga ipString ket mabalin a maysa nga umiso nga adres ti IPv4 wenno IPv6.

Dagiti pagarigan:

local ipv4Address = IPAddress.new('1.2.3.4')
local ipv6Address = IPAddress.new('2001:db8::ff00:12:3456')

Dagiti banag ti IPAddress ket mabalin nga iyasping kadagiti mainaig nga operador:

-- Ekualidad
IPAddress.new('1.2.3.4') == IPAddress.new('1.2.3.4') -- true
IPAddress.new('1.2.3.4') == IPAddress.new('1.2.3.5') -- false

-- Basbassit ngem / ad-adu ngem
IPAddress.new('1.2.3.4') < IPAddress.new('1.2.3.5')  -- true
IPAddress.new('1.2.3.4') > IPAddress.new('1.2.3.5')  -- false
IPAddress.new('1.2.3.4') <= IPAddress.new('1.2.3.5') -- true
IPAddress.new('1.2.3.4') <= IPAddress.new('1.2.3.4') -- true

Mabalinmo nga usaren kaniada ti tostring (daytoy ket kapada ti panagusar ti getIP):

tostring(IPAddress.new('1.2.3.4'))                -- "1.2.3.4"
tostring(IPAddress.new('2001:db8::ff00:12:3456')) -- "2001:db8::ff00:12:3456"

-- Naipangyababba dagiti napadakkel nga adres ti IPv6:
tostring(IPAddress.new('2001:db8:0:0:0:0:0:0'))   -- "2001:db8::"

Mabalinmo pay nga i-concatenate kaniada:

IPAddress.new('1.2.3.4') .. ' foo'                   -- "1.2.3.4 foo"
IPAddress.new('1.2.3.4') .. IPAddress.new('5.6.7.8') -- "1.2.3.45.6.7.8"

Dagiti banag ti IPAddress ket addaan kadagiti nadumaduma a pamay-an, a naipalawag dita baba.

getIP urnosen

ipAddress:getIP()

Mangisubli ti maysa a kuerdas a representasion ti adres ti IP. No mabalin maipangyababa dagiti adres ti IPv6.

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):getIP()                -- "1.2.3.4"
IPAddress.new('2001:db8::ff00:12:3456'):getIP() -- "2001:db8::ff00:12:3456"
IPAddress.new('2001:db8:0:0:0:0:0:0'):getIP()   -- "2001:db8::"

getVersion urnosen

ipAddress:getVersion()

Mangisubli ti bersion iti naus-usar a protokol ti IP. Daytoy ket "IPv4" para kadagiti adres ti IPv4, ken "IPv6" para kadagiti adres ti IPv6.

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):getVersion()                -- "IPv4"
IPAddress.new('2001:db8::ff00:12:3456'):getVersion() -- "IPv6"

isIPv4 urnosen

ipAddress:isIPv4()

Mangisubli ti "true" no ti adres ti IP ket maysa nga adres ti IPv4, ken "false" no saan.

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):isIPv4()                -- true
IPAddress.new('2001:db8::ff00:12:3456'):isIPv4() -- false

isIPv6 urnosen

ipAddress:isIPv6()

Mangisubli ti "true" no ti adres ti IP ket maysa nga adres ti IPv6, ken "false" no saan.

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):isIPv6()                -- false
IPAddress.new('2001:db8::ff00:12:3456'):isIPv6() -- true

isInSubnet urnosen

ipAddress:isInSubnet(subnet)

Mangisubli ti "true" no ti adres ti IP ket adda iti subnet subnet, ken "false" no saan. subnet ken mabalin a maysa a banag ti Subnet wenno maysa a kuerdas ti CIDR].

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):isInSubnet('1.2.3.0/24')                             -- true
IPAddress.new('1.2.3.4'):isInSubnet('1.2.4.0/24')                             -- false
IPAddress.new('1.2.3.4'):isInSubnet(Subnet.new('1.2.3.0/24'))                 -- true
IPAddress.new('2001:db8::ff00:12:3456'):isInSubnet('2001:db8::ff00:12:0/112') -- true

getSubnet urnosen

ipAddress:getSubnet(bitLength)

Mangisubli ti mays a banag ti subnet para iti subnet iti maysa a kaatiddog ti bit iti bitLength nga aglaon iti agdama nga IP. Ti parametro ti bitLength ket nasken a maysa nga integer iti pagbaetan ti 0 ken 32 para kadagiti afres ti IPv4, wenno maysa nga integer iti pagbaetaan ti 0 ken 128 para kadagiti adres ti IPv6.

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):getSubnet(24) -- Kapada iti Subnet.new('1.2.3.0/24')

getNextIP urnosen

ipAddress:getNextIP()

Mangisubli iti baro a banag ti IPAddress a maipada iti agdama nga adres ti IP a maingkremento babaen ti maysa. Ti adres ti IPv4 ti "255.255.255.255" ket maipan iti agarup a "0.0.0.0", ken ti adres ti IPv6 iti "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ket maipan iti agarup a "::".

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):getNextIP()                -- Kapada iti IPAddress.new('1.2.3.5')
IPAddress.new('2001:db8::ff00:12:3456'):getNextIP() -- Kapada iti IPAddress.new('2001:db8::ff00:12:3457')
IPAddress.new('255.255.255.255'):getNextIP()        -- Kapada iti IPAddress.new('0.0.0.0')

getPreviousIP urnosen

ipAddress:getPreviousIP()

Mangisubli iti baro a banag ti IPAddress a maipada iti agdama nga adres ti IP a maingkremento babaen ti maysa. Ti adres ti IPv4 iti "0.0.0.0" ket maipan iti agarup a "255.255.255.255", ken ti adres ti IPv6 iti "::" ket maipan iti agarup a "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff".

Dagiti pagarigan:

IPAddress.new('1.2.3.4'):getPreviousIP()                -- Kapada iti IPAddress.new('1.2.3.3')
IPAddress.new('2001:db8::ff00:12:3456'):getPreviousIP() -- Kapada iti IPAddress.new('2001:db8::ff00:12:3455')
IPAddress.new('0.0.0.0'):getPreviousIP()                -- Kapada iti IPAddress.new('255.255.255.255')

Subnet urnosen

Ti klase ti subnet ket inus-usar iti panagobra kadagiti subnetwork dagiti adres ti IPv4 wenno IPv6. Ti agpartuat iti baro a banag ti Subnet:

local subnet = Subnet.new(cidrString)

Ti cidrString ket nasken nga umiso nga IPv4 wenno kuerdas ti IPv6 CIDR.

Dagiti banag ti subnet ket mabalinda nga iyasping para iti ekualidad:

Subnet.new('1.2.3.0/24') == Subnet.new('1.2.3.0/24')                           -- true
Subnet.new('1.2.3.0/24') == Subnet.new('1.2.3.0/25')                           -- false
Subnet.new('1.2.3.0/24') == Subnet.new('2001:db8::ff00:12:0/112')              -- false
Subnet.new('2001:db8::ff00:12:0/112') == Subnet.new('2001:db8::ff00:12:0/112') -- true
Subnet.new('2001:db8:0:0:0:0:0:0/112') == Subnet.new('2001:db8::/112')         -- true

Mabalinmo nga usaren kaniada ti tostring (daytoy ket kapada ti getCIDR):

tostring(Subnet.new('1.2.3.0/24'))               -- "1.2.3.0/24"
tostring(Subnet.new('2001:db8::ff00:12:0/112'))  -- "2001:db8::ff00:12:0/112"
tostring(Subnet.new('2001:db8:0:0:0:0:0:0/112')) -- "2001:db8::/112"

Mabalinmo pay nga i-concatenate kaniada:

Subnet.new('1.2.3.0/24') .. ' foo'                   -- "1.2.3.0/24 foo"
Subnet.new('1.2.3.0/24') .. Subnet.new('4.5.6.0/24') -- "1.2.3.0/244.5.6.0/24"

Dagiti banag ti subnet ket addaan kadagiti nadumaduma a pamay-an, a naipalawag dita baba.

getPrefix urnosen

subnet:getPrefix()

Mangisubli ti maysa a banag ti IPAddress para iti kababaan nga adres ti IP iti subnet.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):getPrefix()              -- Kapada iti IPAddress.new('1.2.3.0')
Subnet.new('2001:db8::ff00:12:0/112'):getPrefix() -- Kapada iti IPAddress.new('2001:db8::ff00:12:0')

getHighestIP urnosen

subnet:getHighestIP()

Mangisubli ti maysa a banag ti IPAddress para iti kangatuan nga adres ti IP iti subnet.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):getHighestIP()              -- Kapada iti IPAddress.new('1.2.3.255')
Subnet.new('2001:db8::ff00:12:0/112'):getHighestIP() -- Kapada iti IPAddress.new('2001:db8::ff00:12:ffff')

getBitLength urnosen

subnet:getBitLength()

Mnagisubli ti kaatiddog ti bit iti subnet. Daytoy ket maysa nga integer iti pagbaetan ti 0 ken 32 para kadagiti adres ti IPv4, wenno maysa nga integer iti pagbaetan ti 0 ken 128 para kadagiti adres ti IPv6.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):getBitLength()              -- 24
Subnet.new('2001:db8::ff00:12:0/112'):getBitLength() -- 112

getCIDR urnosen

subnet:getCIDR()

Mangisubli ti maysa a kuerdas ti representasion ti CIDR iti subnet.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):getCIDR()               -- "1.2.3.0/24"
Subnet.new('2001:db8::ff00:12:0/112'):getCIDR()  -- "2001:db8::ff00:12:0/112"
Subnet.new('2001:db8:0:0:0:0:0:0/112'):getCIDR() -- "2001:db8::/112"

getVersion urnosen

subnet:getVersion()

Mangisubli ti bersion ti inus-usar a protokol ti IP. Daytoy ket ti "IPv4" para kadagiti adres ti IPv4s, ken "IPv6" para kadagiti adres ti IPv6.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):getVersion()              -- "IPv4"
Subnet.new('2001:db8::ff00:12:0/112'):getVersion() -- "IPv6"

isIPv4 urnosen

subnet:isIPv4()

Mangisubli ti "true" no ti subnet ket agus-usar iti IPv4, ken "false" no saan.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):isIPv4()              -- true
Subnet.new('2001:db8::ff00:12:0/112'):isIPv4() -- false

isIPv6 urnosen

subnet:isIPv6()

Mangisubli ti "true" no ti subnet ket agus-usar iti IPv6, ken "false" no saan.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):isIPv6()              -- false
Subnet.new('2001:db8::ff00:12:0/112'):isIPv6() -- true

containsIP urnosen

subnet:containsIP(ip)

Returns "true" no ti subnet ket aglaon ti adres ti IP ip, ken "false" no saan. ti ip ket mabalin a maysa a kuerdas ti adres ti IP, wenno maysa a banag ti IPAddress.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):containsIP('1.2.3.4')                             -- true
Subnet.new('1.2.3.0/24'):containsIP('1.2.4.4')                             -- false
Subnet.new('1.2.3.0/24'):containsIP(IPAddress.new('1.2.3.4'))              -- true
Subnet.new('2001:db8::ff00:12:0/112'):containsIP('2001:db8::ff00:12:3456') -- true

overlapsSubnet urnosen

subnet:overlapsSubnet(subnet)

Mangisubli ti "true" no ti agdama a subnet ket tuonanna iti subnet, ken "false" no saan. Ti subnet ket mabalin a kuerdas ti CIDR wenno maysa a banag ti subnet.

Dagiti pagarigan:

Subnet.new('1.2.3.0/24'):overlapsSubnet('1.2.0.0/16')                         -- true
Subnet.new('1.2.3.0/24'):overlapsSubnet('1.2.12.0/22')                        -- false
Subnet.new('1.2.3.0/24'):overlapsSubnet(Subnet.new('1.2.0.0/16'))             -- true
Subnet.new('2001:db8::ff00:12:0/112'):overlapsSubnet('2001:db8::ff00:0:0/96') -- true

walk urnosen

subnet:walk()

Ti pamay-an ti "walk" ket iteradona kadagiti amin a banag ti IPAddress iti subnet.

Dagiti pagarigan:

for ipAddress in Subnet.new('192.168.0.0/30'):walk() do
	mw.log(tostring(ipAddress))
end
-- 192.168.0.0
-- 192.168.0.1
-- 192.168.0.2
-- 192.168.0.3

IPv4Collection urnosen

Ti klase ti IPv4Collection ke inus-usar iti panagobra kadagiti nadumaduma nga adres ti IPv4 ken dagiti subnet ti IPv4. Ti agpartuat iti baro a banag ti IPv4Collection:

local collection = IPv4Collection.new()

Adda dagiti nadumaduma a pamay-an ti IPv4Collection, kas ti naipalawag dita baba.

getVersion urnosen

collection:getVersion()

Mangisubli ti kuerdas ti "IPv4".

addIP urnosen

collection:addIP(ip)

Manginayon ti maysa nga IP iti koleksion. Ti IP ket mabalin a maysa a kuerdas wenno maysa a banag ti IPAddress.

Dagiti pagarigan:

collection:addIP('1.2.3.4')
collection:addIP(IPAddress.new('1.2.3.4'))

Mabalin a pagsisilpuen daytoy a pamay-an:

collection:addIP('1.2.3.4'):addIP('5.6.7.8')

addSubnet urnosen

collection:addSubnet(subnet)

Manginayon ti maysa a subnet iti koleksion. Ti subnet ket mabalin a maysa a kuerdas ti CIDR wenno maysa a banag ti Subnet.

Dagiti pagarigan:

collection:addSubnet('1.2.3.0/24')
collection:addSubnet(Subnet.new('1.2.3.0/24'))

Mabalin a pagsisilpuen daytoy a pamay-an:

collection:addSubnet('1.2.0.0/24'):addSubnet('1.2.1.0/24')

addFromString urnosen

collection:addFromString(str)

Mangiyaon kadagiti ania man nga adres ti IPv4 ken dagiti subnet ti IPv4 CIDR manipud iti str ken inayon dagitoy iti koleksion. Saan a maikaskaso ti ania man a teksto a saan nga adres ti IPv4 wenno subnet ti CIDR .

Dagiti pagarigan:

collection:addFromString('Add some IPs and subnets: 1.2.3.4 1.2.3.5 2001:0::f foo 1.2.4.0/24')

Mabalin a pagsisilpuen daytoy a pamay-an:

collection:addFromString('foo 1.2.3.4'):addFromString('bar 5.6.7.8')

containsIP urnosen

collection:containsIP(ip)

Mangisubli ti "true" no ti koleksion ket aglaon ti nainaganan nga IP; no saan mangisubli ti "false". Ti parametro ti ip ket mabalin a maysa a kuerdas wenno maysa a banag ti IPAddress.

Dagiti pagarigan:

collection:containsIP('1.2.3.4')
collection:containsIP(IPAddress.new('1.2.3.4'))

getRanges urnosen

collection:getRanges()

Mangisubli ti maysa nga urnos ti rimpuok dagiti paris ti adres ti IP a kapada iti koleksion. Ti tunggal maysa a paris ti IP ket maysa a rimpuok a mangipresenta iti maysa nga agtutuloy a sakup dagiti adres ti IP manipud iti paris[1] aginggana iti paris[2] nga ingklusibo. Ti paris[1] ken paris[2] ket dagiti banag ti IPAddress.

Dagiti pagarigan:

collection:addSubnet('1.2.0.0/24')
collection:addSubnet('1.2.1.0/24')
collection:addSubnet('1.2.10.0/24')
mw.logObject(collection:getRanges())
-- Ilistana dagiti sumaganad:
-- table#1 {
--   table#2 {
--     1.2.0.0,
--     1.2.1.255,
--   },
--   table#3 {
--     1.2.10.0,
--     1.2.10.255,
--   },
-- }

overlapsSubnet urnosen

collection:overlapsSubnet(subnet)

Mangisubli ti "true", "obj" no ti subnet ket tuonanna daytoy a koleksion, a ti "obj" ket ti umuna nga IPAddress wenno banag ti Subnet a mangtuoon iti subnet. No saan, mangisubli ti "false". Ti subnet ket mabalin a maysa a kuerdas ti CIDR wenno maysa a banag ti Subnet.

Dagiti pagarigan:

collection:addIP('1.2.3.4')
collection:overlapsSubnet('1.2.3.0/24') -- true, IPAddress.new('1.2.3.4')
collection:overlapsSubnet('1.2.4.0/24') -- false

IPv6Collection urnosen

Ti klase ti IPv6Collection ket inus-usar iti panagobra kadagiti nadumaduma a sabali nga adres ti IPv6 ken dagiti subnet ti IPv6. Dagiti banag ti IPv6Collection ket dagus nga analogo kadagiti banag ti IPv4Collection: aglaonda kadagiti isu met laeng a pamay-an ken agpadada met laeng nga agobra, ngem amin dagiti adres ti IP ken dagiti subnet a mainayon iti daytoy ket nasken nga IPv6, ken saan nga IPv4.

Ti agpartuat iti baro a banag ti IPv6Collection:

local collection = IPv6Collection.new()