Module:IP/τεκμηρίωση
Yποσελίδα τεκμηρίωσης για το Module:IP. Περιέχει πληροφορίες χρήσης, κατηγορίες και περιεχόμενο που δεν αποτελεί τμήμα του αρχικού module. |
Yποσελίδα τεκμηρίωσης για το Module:IP. Περιέχει πληροφορίες χρήσης, κατηγορίες και περιεχόμενο που δεν αποτελεί τμήμα του αρχικού module. |
Το 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()