Module:IP/τεκμηρίωση

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

Το Module:IP είναι μια βιβλιοθήκη για εργασία με διευθύνσεις IP και υποδίκτυα. Μπορεί να χειριστεί και IPv4 και IPv6. Η βιβλιοθήκη εξάγει τέσσερις κλάσεις, IPAddress, Subnet, IPv4Collection, και IPv6Collection.

Φόρτωση της βιβλιοθήκης[επεξεργασία κώδικα]

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

IPAddress[επεξεργασία κώδικα]

Η κλάση IPAddress χρησιμοποιείται για εργασία με μεμονωμένες διευθύνσεις IP. Για να δημιουργήσετε ένα νέο αντικείμενο διεύθυνσης IP:

local ipAddress = IPAddress.new(ipString)

Η μεταβλητή ipString μπορεί να είναι έγκυρη διεύθυνση IPv4 ή IPv6.

Παραδείγματα:

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

Τα αντικείμενα IPAddress μπορούν να συγκριθούν με σχεσιακούς τελεστές:

-- Ισότητα
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

-- Μικρότερη από / Μεγαλύτερη από
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

Μπορείτε να χρησιμοποιήσετε tostring σε αυτά (αυτό ισοδυναμεί με τη χρήση του 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"

-- Οι διευρυμένες διευθύνσεις IPv6 έχουν συντομογραφία:
tostring(IPAddress.new('2001:db8:0:0:0:0:0:0'))   -- "2001:db8::"

Μπορείτε επίσης να τα συνδυάσετε:

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"

Τα αντικείμενα IPAddress έχουν διάφορες μεθόδους, οι οποίες περιγράφονται παρακάτω.

getIP[επεξεργασία κώδικα]

ipAddress:getIP()

Επιστρέφει μια παράσταση συμβολοσειράς της διεύθυνσης IP. Οι διευθύνσεις IPv6 συντομεύονται εάν είναι δυνατόν.

Παραδείγματα:

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[επεξεργασία κώδικα]

ipAddress:getVersion()

Επιστρέφει την έκδοση του πρωτοκόλλου IP που χρησιμοποιείται. Αυτό είναι «IPv4» για διευθύνσεις IPv4 και «IPv6» για διευθύνσεις IPv6.

Παραδείγματα:

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

isIPv4[επεξεργασία κώδικα]

ipAddress:isIPv4()

Επιστρέφει true εάν η διεύθυνση IP είναι διεύθυνση IPv4, και false διαφορετικά.

Παραδείγματα:

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

isIPv6[επεξεργασία κώδικα]

ipAddress:isIPv6()

Επιστρέφει true εάν η διεύθυνση IP είναι διεύθυνση IPv6, και false διαφορετικά.

Παραδείγματα:

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

isInSubnet[επεξεργασία κώδικα]

ipAddress:isInSubnet(subnet)

Επιστρέφει true εάν η διεύθυνση IP βρίσκεται στο υποδίκτυο subnet και false διαφορετικά. Το subnet μπορεί να είναι Subnet object ή CIDR συμβολοσειρά.

Παραδείγματα:

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[επεξεργασία κώδικα]

ipAddress:getSubnet(bitLength)

Επιστρέφει ένα αντικείμενο υποδικτύου για το υποδίκτυο με ένα bit μήκος bitLength που περιέχει την τρέχουσα IP. Η παράμετρος bitLength πρέπει να είναι ακέραιος μεταξύ 0 και 32 για διευθύνσεις IPv4 ή ακέραιος μεταξύ 0 και 128 για διευθύνσεις IPv6.

Παραδείγματα:

IPAddress.new('1.2.3.4'):getSubnet(24) -- Equivalent to Subnet.new('1.2.3.0/24')

getNextIP[επεξεργασία κώδικα]

ipAddress:getNextIP()

Επιστρέφει ένα νέο αντικείμενο IPAddress ισοδύναμο με την τρέχουσα διεύθυνση IP προσαυξημένη κατά ένα. Η διεύθυνση IPv4 "255.255.255.255" μετατρέπεται σε "0.0.0.0" και η διεύθυνση IPv6 "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" μετατρέπεται σε "::".

Παραδείγματα:

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

getPreviousIP[επεξεργασία κώδικα]

ipAddress:getPreviousIP()

Επιστρέφει ένα νέο αντικείμενο IPAddress ισοδύναμο με την τρέχουσα διεύθυνση IP μειωμένη κατά ένα. Η διεύθυνση IPv4 "0.0.0.0" μετατρέπεται σε "255.255.255.255" και η διεύθυνση IPv6 "::" μετατρέπεται σε "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff".

Παραδείγματα:

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

Subnet[επεξεργασία κώδικα]

Η κλάση Subnet χρησιμοποιείται για εργασία με υποδίκτυα διευθύνσεων IPv4 ή IPv6. Για να δημιουργήσετε ένα νέο αντικείμενο υποδικτύου:

local subnet = Subnet.new(cidrString)

cidrStringπρέπει να είναι έγκυρη συμβολοσειρά IPv4 ή IPv6 CIDR.

Τα αντικείμενα υποδικτύου μπορούν να συγκριθούν ως προς την ισότητα:

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

Μπορείτε να χρησιμοποιήσετε tostring σε αυτά (αυτό ισοδυναμεί με 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"

Μπορείτε επίσης να τα συνδυάσετε:

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"

Τα αντικείμενα υποδικτύου έχουν διάφορες μεθόδους, οι οποίες περιγράφονται παρακάτω.

getPrefix[επεξεργασία κώδικα]

subnet:getPrefix()

Επιστρέφει ένα αντικείμενο IPAddress για τη χαμηλότερη διεύθυνση IP στο υποδίκτυο.

Παραδείγματα:

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

getHighestIP[επεξεργασία κώδικα]

subnet:getHighestIP()

Επιστρέφει ένα αντικείμενο IPAddress για την υψηλότερη διεύθυνση IP στο υποδίκτυο.

Παραδείγματα:

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

getBitLength[επεξεργασία κώδικα]

subnet:getBitLength()

Επιστρέφει το μήκος bit του υποδικτύου. Αυτός είναι ένας ακέραιος αριθμός μεταξύ 0 και 32 για διευθύνσεις IPv4 ή ακέραιος μεταξύ 0 και 128 για διευθύνσεις IPv6.

Παραδείγματα:

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

getCIDR[επεξεργασία κώδικα]

subnet:getCIDR()

Επιστρέφει μια συμβολοσειρά αναπαράστασης CIDR του υποδικτύου.

Παραδείγματα:

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[επεξεργασία κώδικα]

subnet:getVersion()

Επιστρέφει την έκδοση του πρωτοκόλλου IP που χρησιμοποιείται. Αυτό είναι "IPv4" για διευθύνσεις IPv4 και "IPv6" για διευθύνσεις IPv6.

Παραδείγματα:

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

isIPv4[επεξεργασία κώδικα]

subnet:isIPv4()

Επιστρέφει true εάν το υποδίκτυο χρησιμοποιεί IPv4 και false διαφορετικά.

Παραδείγματα:

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

isIPv6[επεξεργασία κώδικα]

subnet:isIPv6()

Επιστρέφει true εάν το υποδίκτυο χρησιμοποιεί IPv6 και false διαφορετικά.

Παραδείγματα:

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

containsIP[επεξεργασία κώδικα]

subnet:containsIP(ip)

Επιστρέφει true εάν το υποδίκτυο περιέχει τη διεύθυνση IP ip, και false διαφορετικά. Το ip μπορεί να είναι μια συμβολοσειρά διεύθυνσης IP ή ένα αντικείμενο διεύθυνσης IP.

Παραδείγματα:

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[επεξεργασία κώδικα]

subnet:overlapsSubnet(subnet)

Επιστρέφει true εάν το τρέχον υποδίκτυο επικαλύπτεται με το subnet, και false διαφορετικά. Το subnet μπορεί να είναι μια συμβολοσειρά CIDR ή ένα αντικείμενο υποδικτύου.

Παραδείγματα:

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[επεξεργασία κώδικα]

subnet:walk()

Η μέθοδος walk περιδιαβαίνει (iterates) σε όλα τα αντικείμενα διεύθυνσης IP στο υποδίκτυο.

Παραδείγματα:

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[επεξεργασία κώδικα]

Η κλάση IPv4Collection χρησιμοποιείται για εργασία με πολλές διαφορετικές διευθύνσεις IPv4 και υποδίκτυα IPv4. Για να δημιουργήσετε ένα νέο αντικείμενο IPv4Collection:

local collection = IPv4Collection.new()

Τα αντικείμενα IPv4Collection έχουν διάφορες μεθόδους, οι οποίες περιγράφονται παρακάτω.

getVersion[επεξεργασία κώδικα]

collection:getVersion()

Επιστρέφει τη συμβολοσειρά "IPv4".

addIP[επεξεργασία κώδικα]

collection:addIP(ip)

Προσθέτει μια IP στη συλλογή. Η IP μπορεί να είναι είτε μια συμβολοσειρά είτε ένα αντικείμενο IPAddress.

Παραδείγματα:

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

Αυτή η μέθοδος μπορεί να είναι αλυσιδωτή:

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

addSubnet[επεξεργασία κώδικα]

collection:addSubnet(subnet)

Προσθέτει ένα υποδίκτυο στη συλλογή. Το υποδίκτυο μπορεί να είναι είτε συμβολοσειρά CIDR ή ένα αντικείμενο Subnet.

Παραδείγματα:

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

Αυτή η μέθοδος μπορεί να είναι αλυσιδωτή:

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

addFromString[επεξεργασία κώδικα]

collection:addFromString(str)

Εξάγει τυχόν διευθύνσεις IPv4 και IPv4 υποδίκτυα CIDR από το str και τα προσθέτει στη συλλογή. Οποιοδήποτε κείμενο δεν είναι διεύθυνση IPv4 ή υποδίκτυο CIDR αγνοείται.

Παραδείγματα:

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

Αυτή η μέθοδος μπορεί να είναι αλυσιδωτή:

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

containsIP[επεξεργασία κώδικα]

collection:containsIP(ip)

Επιστρέφει true εάν η συλλογή περιέχει την καθορισμένη IP· διαφορετικά επιστρέφει false. Η παράμετρος ip μπορεί να είναι μια συμβολοσειρά ή ένα αντικείμενο IPAddress.

Παραδείγματα:

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

getRanges[επεξεργασία κώδικα]

collection:getRanges()

Επιστρέφει έναν ταξινομημένο πίνακα ζευγών IP ισοδύναμου με τη συλλογή. Κάθε ζεύγος IP είναι ένας πίνακας που αντιπροσωπεύει ένα συνεχόμενο εύρος διευθύνσεων IP από pair[1] έως pair[2] συμπεριλαμβανομένου. Το pair[1] και το pair[2] είναι αντικείμενα IPAddress.

Παραδείγματα:

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())
-- Logs the following:
-- table#1 {
--   table#2 {
--     1.2.0.0,
--     1.2.1.255,
--   },
--   table#3 {
--     1.2.10.0,
--     1.2.10.255,
--   },
-- }

overlapsSubnet[επεξεργασία κώδικα]

collection:overlapsSubnet(subnet)

Επιστρέφει true, obj εάν το subnet επικαλύπτει αυτήν τη συλλογή, όπου το obj είναι το πρώτο αντικείμενο IPAddress ή Subnet που επικαλύπτει το υποδίκτυο. Διαφορετικά, επιστρέφει false. Το subnet μπορεί να είναι μια συμβολοσειρά CIDR ή ένα αντικείμενο Subnet .

Παραδείγματα:

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[επεξεργασία κώδικα]

Η κλάση IPv6Collection χρησιμοποιείται για εργασία με πολλές διαφορετικές διευθύνσεις IPv6 και υποδίκτυα IPv6. Τα αντικείμενα IPv6Collection είναι άμεσα ανάλογα με τα αντικείμενα IPv4Collection: περιέχουν τις ίδιες μεθόδους και λειτουργούν με τον ίδιο τρόπο, αλλά όλες οι διευθύνσεις IP και τα υποδίκτυα που προστίθενται σε αυτό πρέπει να είναι IPv6, όχι IPv4.

Για να δημιουργήσετε ένα νέο αντικείμενο IPv6Collection:

local collection = IPv6Collection.new()