모듈:IP
Module:IP| 이 모듈은 페이지 보호의 대상이 된다.그것은 매우 많은 페이지들이 사용하고 있거나 매우 자주 교체되는 매우 눈에 잘 띄는 모듈이다.공공 기물 파손이나 실수가 많은 페이지에 영향을 미치고 사소한 편집이라도 서버에 상당한 부하를 줄 수 있기 때문에 편집으로부터 보호된다. |
| 이 Lua 모듈은 시스템 메시지 및 약 108,000페이지에 사용된다. 그것에 대한 변경은 위키백과 사용자 인터페이스에 즉각적인 변화를 일으킬 수 있다. 큰 중단과 서버 로드를 방지하려면 모듈의 /샌드박스 또는 /테스트케이스 하위 페이지 또는 사용자 고유의 모듈 샌드박스에서 변경 사항을 테스트해야 한다.테스트한 변경사항은 한 번의 편집으로 이 페이지에 추가될 수 있다.변경 사항을 적용하기 전에 토크 페이지에서 논의하십시오. |
Module:IP는 IP 주소와 서브넷을 사용하기 위한 라이브러리 입니다.IPv4와 IPv6을 모두 처리할 수 있다.라이브러리는 IPAddress, Subnet, IPv4Collection, IPv6Collection의 네 가지 클래스를 내보낸다.
라이브러리 로드
국부적 IP = 요구하다('모듈:IP') 국부적 IP 주소 = IP.IP 주소 국부적 서브넷 = IP.서브넷 IP 주소
IPAddress 클래스는 단일 IP 주소로 작업하는 데 사용된다.새 IPAddress 개체를 생성하려면:
국부적 ip 주소 = IP 주소.새로운(ipString) ipString 변수는 유효한 IPv4 또는 IPv6 주소일 수 있다.
예:
국부적 ipv4Address = IP 주소.새로운('1.2.3.4') 국부적 ipv6Adress = IP 주소.새로운('2001:db8:::ff00:12:3456') IPAdddress 객체를 관계형 연산자와 비교할 수 있다.
-- 평등 IP 주소.새로운('1.2.3.4') == IP 주소.새로운('1.2.3.4') ­ 참말 IP 주소.새로운('1.2.3.4') == IP 주소.새로운('1.2.3.5') - 거짓 -- 보다 작음/보다 큼 IP 주소.새로운('1.2.3.4') < IP 주소.새로운('1.2.3.5') ­ 참말 IP 주소.새로운('1.2.3.4') > IP 주소.새로운('1.2.3.5') - 거짓 IP 주소.새로운('1.2.3.4') <= IP 주소.새로운('1.2.3.5') ­ 참말 IP 주소.새로운('1.2.3.4') <= IP 주소.새로운('1.2.3.4') ­ 참말 당신은 그것들에 스트링을 사용할 수 있다. 이것은 get을 사용하는 것과 같다.IP:
토스트링(IP 주소.새로운('1.2.3.4')) -- "1.2.3.4" 토스트링(IP 주소.새로운('2001:db8:::ff00:12:3456')) - "2001:db8:::ff00:12:3456" -- 확장 IPv6 주소 약어: 토스트링(IP 주소.새로운('2001:db8:0:0:0:0:0:0:0')) - "2001:db8::" 또한 다음과 같이 연결할 수 있다.
IP 주소.새로운('1.2.3.4') .. 'foo' - "1.2.3.4 foo" IP 주소.새로운('1.2.3.4') .. IP 주소.새로운('5.6.7.8') -- "1.2.3.45.6.7.8" IPAdddress 객체에는 아래에 설명된 몇 가지 방법이 있다.
getIP
ip 주소:getIP() IP 주소의 문자열 표현을 반환한다.가능하면 IPv6 주소를 줄여서 쓴다.
예:
IP 주소.새로운('1.2.3.4'):getIP() -- "1.2.3.4" IP 주소.새로운('2001:db8:::ff00:12:3456'):getIP() - "2001:db8:::ff00:12:3456" IP 주소.새로운('2001:db8:0:0:0:0:0:0:0'):getIP() - "2001:db8::" getVersion
ip 주소:getVersion() 사용 중인 IP 프로토콜의 버전을 반환한다.이것은 IPv4 주소의 경우 "IPv4"이고 IPv6 주소의 경우 "IPv6"이다.
예:
IP 주소.새로운('1.2.3.4'):getVersion() - "IPv4" IP 주소.새로운('2001:db8:::ff00:12:3456'):getVersion() - "IPv6" isIPv4
ip 주소:isIPv4() IP 주소가 IPv4 주소인 경우 true를 반환하고 그렇지 않은 경우 false를 반환한다.
예:
IP 주소.새로운('1.2.3.4'):isIPv4() ­ 참말 IP 주소.새로운('2001:db8:::ff00:12:3456'):isIPv4() - 거짓 isIPv6
ip 주소:isIPv6() IP 주소가 IPv6 주소인 경우 true를 반환하고 그렇지 않은 경우 false를 반환한다.
예:
IP 주소.새로운('1.2.3.4'):isIPv6() - 거짓 IP 주소.새로운('2001:db8:::ff00:12:3456'):isIPv6() ­ 참말 isInSubnet
ip 주소:isInSubnet(서브넷) IP 주소가 서브넷에 있는 경우 true를 반환함subnet, 그리고 그렇지 않으면 거짓이다. subnet서브넷 개체 또는 CIDR 문자열일 수 있다.
예:
IP 주소.새로운('1.2.3.4'):isInSubnet('1.2.3.0/24') ­ 참말 IP 주소.새로운('1.2.3.4'):isInSubnet('1.2.4.0/24') - 거짓 IP 주소.새로운('1.2.3.4'):isInSubnet(서브넷.새로운('1.2.3.0/24')) ­ 참말 IP 주소.새로운('2001:db8:::ff00:12:3456'):isInSubnet('2001:db8::ff00:12:0/190') ­ 참말 getSubnet
ip 주소:getSubnet(비트길이) 서브넷에 대한 서브넷 개체 반환(비트 길이:bitLength현재 IP를 포함하는.그bitLength매개 변수는 IPv4 주소의 경우 0과 32 사이의 정수여야 하며 IPv6 주소의 경우 0과 128 사이의 정수여야 한다.
예:
IP 주소.새로운('1.2.3.4'):getSubnet(24) -- Subnet.new('1.2.3.0/24')와 동일함 getNextIP
ip 주소:getNextIP() 1씩 증가된 현재 IP 주소와 동등한 새 IPAddress 개체를 반환한다.IPv4 주소 "255.255.255.255"는 "0.0.0"으로 롤링하고 IPv6 주소 "ffff:fffff:fffff:fffff:ffffff:fffffff"는 "::"로 롤링한다.
예:
IP 주소.새로운('1.2.3.4'):getNextIP() -- IPAddress.new('1.2.3.5')와 동일함 IP 주소.새로운('2001:db8:::ff00:12:3456'):getNextIP() -- IPAdddress.new에 상당('2001:db8:::ff00:12:3457') IP 주소.새로운('255.255.255.255'):getNextIP() -- IPAddress.new('0.0.0')와 동일함 get PreviousIP
ip 주소:get PreviousIP() 현재 IP 주소가 1로 감소된 것과 동등한 새 IPAddress 개체를 반환한다.IPv4 주소 "0.0.0.0"은 "255.255.255.255"로 롤링하고 IPv6 주소 ":::"는 "fffff:fff:ffffff:ffffff:ffffff:ffffff"로 롤링한다.
예:
IP 주소.새로운('1.2.3.4'):get PreviousIP() -- IPAddress.new('1.2.3.3')와 동일함 IP 주소.새로운('2001:db8:::ff00:12:3456'):get PreviousIP() -- IPAdddress.new에 상당('2001:db8:::ff00:12:3455') IP 주소.새로운('0.0.0.0'):get PreviousIP() -- IPAddress.new와 동등('255.255.255.255') 서브넷
서브넷 클래스는 IPv4 또는 IPv6 주소의 하위 네트워크와 함께 작동하기 위해 사용된다.새 서브넷 개체를 만드는 방법
국부적 서브넷 = 서브넷.새로운(cidrString) cidrString유효한 IPv4 또는 IPv6 CIDR 문자열이어야 한다.
서브넷 개체는 동등하게 비교할 수 있다.
서브넷.새로운('1.2.3.0/24') == 서브넷.새로운('1.2.3.0/24') ­ 참말 서브넷.새로운('1.2.3.0/24') == 서브넷.새로운('1.2.3.0/25') - 거짓 서브넷.새로운('1.2.3.0/24') == 서브넷.새로운('2001:db8::ff00:12:0/190') - 거짓 서브넷.새로운('2001:db8::ff00:12:0/190') == 서브넷.새로운('2001:db8::ff00:12:0/190') ­ 참말 서브넷.새로운('2001:db8:0:0:0:0:0:0:0:0/messages') == 서브넷.새로운('2001:db8:::/message') ­ 참말 togring을 사용할 수 있다(getCIDR과 동일).
토스트링(서브넷.새로운('1.2.3.0/24')) -- "1.2.3.0/24" 토스트링(서브넷.새로운('2001:db8::ff00:12:0/190')) - "2001:db8::ff00:12:0/190" 토스트링(서브넷.새로운('2001:db8:0:0:0:0:0:0:0:0/messages')) - "2001:db8:::/message" 또한 다음과 같이 연결할 수 있다.
서브넷.새로운('1.2.3.0/24') .. 'foo' - "1.2.3.0/24 foo" 서브넷.새로운('1.2.3.0/24') .. 서브넷.새로운('4.5.6.0/24') -- "1.2.3.0/244.5.6.0/24" 서브넷 개체는 아래에 설명된 몇 가지 방법을 가지고 있다.
getprefix
서브넷:getprefix() 서브넷에서 가장 낮은 IP 주소에 대한 IPAddress 개체를 반환하십시오.
예:
서브넷.새로운('1.2.3.0/24'):getprefix() -- IPAddress.new('1.2.3.0')와 동일함 서브넷.새로운('2001:db8::ff00:12:0/190'):getprefix() -- IPAdddress.new에 상당('2001:db8:::ff00:12:0') 최고가 되다IP
서브넷:최고가 되다IP() 서브넷에서 가장 높은 IP 주소에 대한 IPAddress 개체를 반환하십시오.
예:
서브넷.새로운('1.2.3.0/24'):최고가 되다IP() -- IPAddress.new('1.2.3.255')와 동일함 서브넷.새로운('2001:db8::ff00:12:0/190'):최고가 되다IP() -- IPAddress.new에 상당('2001:db8::ff00:12:fff') getBitLength
서브넷:getBitLength() 서브넷의 비트 길이를 반환한다.이것은 IPv4 주소의 경우 0과 32 사이의 정수, IPv6 주소의 경우 0과 128 사이의 정수다.
예:
서브넷.새로운('1.2.3.0/24'):getBitLength() -- 24 서브넷.새로운('2001:db8::ff00:12:0/190'):getBitLength() -- 112 getCIDR
서브넷:getCIDR() 서브넷의 CIDR 문자열 표현 반환.
예:
서브넷.새로운('1.2.3.0/24'):getCIDR() -- "1.2.3.0/24" 서브넷.새로운('2001:db8::ff00:12:0/190'):getCIDR() - "2001:db8::ff00:12:0/190" 서브넷.새로운('2001:db8:0:0:0:0:0:0:0:0/messages'):getCIDR() - "2001:db8:::/message" getVersion
서브넷:getVersion() 사용 중인 IP 프로토콜의 버전을 반환한다.이것은 IPv4 주소의 경우 "IPv4"이고 IPv6 주소의 경우 "IPv6"이다.
예:
서브넷.새로운('1.2.3.0/24'):getVersion() - "IPv4" 서브넷.새로운('2001:db8::ff00:12:0/190'):getVersion() - "IPv6" isIPv4
서브넷:isIPv4() 서브넷이 IPv4를 사용하는 경우 true를 반환하고 그렇지 않으면 false를 반환한다.
예:
서브넷.새로운('1.2.3.0/24'):isIPv4() ­ 참말 서브넷.새로운('2001:db8::ff00:12:0/190'):isIPv4() - 거짓 isIPv6
서브넷:isIPv6() 서브넷이 IPv6을 사용하는 경우 true를 반환하고 그렇지 않으면 false를 반환한다.
예:
서브넷.새로운('1.2.3.0/24'):isIPv6() - 거짓 서브넷.새로운('2001:db8::ff00:12:0/190'):isIPv6() ­ 참말 포함하다IP
서브넷:포함하다IP(ip) 서브넷에 IP 주소가 포함된 경우 true 반환ip, 그리고 그렇지 않으면 거짓이다. ipIP 주소 문자열 또는 IPAddress 객체일 수 있다.
예:
서브넷.새로운('1.2.3.0/24'):포함하다IP('1.2.3.4') ­ 참말 서브넷.새로운('1.2.3.0/24'):포함하다IP('1.2.4.4') - 거짓 서브넷.새로운('1.2.3.0/24'):포함하다IP(IP 주소.새로운('1.2.3.4')) ­ 참말 서브넷.새로운('2001:db8::ff00:12:0/190'):포함하다IP('2001:db8:::ff00:12:3456') ­ 참말 중복 서브넷
서브넷:중복 서브넷(서브넷) 현재 서브넷이 다음 서브넷과 겹칠 경우 true 반환subnet, 그리고 그렇지 않으면 거짓이다. subnetCIDR 문자열 또는 서브넷 개체일 수 있다.
예:
서브넷.새로운('1.2.3.0/24'):중복 서브넷('1.2.0.0/16') ­ 참말 서브넷.새로운('1.2.3.0/24'):중복 서브넷('1.2.12.0/22') - 거짓 서브넷.새로운('1.2.3.0/24'):중복 서브넷(서브넷.새로운('1.2.0.0/16')) ­ 참말 서브넷.새로운('2001:db8::ff00:12:0/190'):중복 서브넷('2001:db8::ff00:0:0/96') ­ 참말 걷다
서브넷:걷다() 걷기 방법은 서브넷의 모든 IPAddress 객체에 반복된다.
예:
을 위해 ip 주소 에 서브넷.새로운('192.168.0.0/30'):걷다() 하다 mw.통나무를 하다(토스트링(ip 주소)) 종지부를 찍다 -- 192.168.0.0 -- 192.168.0.1 -- 192.168.0.2 -- 192.168.0.3 IPv4Collection
IPv4Collection 클래스는 여러 다른 IPv4 주소와 IPv4 서브넷을 사용하는 데 사용된다.새 IPv4Collection 개체를 만드는 방법
국부적 수집 = IPv4Collection.새로운() IPv4Collection 객체는 아래에 설명된 몇 가지 방법을 가지고 있다.
getVersion
수집:getVersion() "IPv4" 문자열을 반환한다.
addIP
수집:addIP(ip) 컬렉션에 IP 추가.IP는 문자열 또는 IPAddress 객체일 수 있다.
예:
수집:addIP('1.2.3.4') 수집:addIP(IP 주소.새로운('1.2.3.4')) 이 방법은 체인 방식으로 사용할 수 있다.
수집:addIP('1.2.3.4'):addIP('5.6.7.8') addSubnet
수집:addSubnet(서브넷) 집합에 서브넷 추가.서브넷은 CIDR 문자열 또는 서브넷 개체일 수 있다.
예:
수집:addSubnet('1.2.3.0/24') 수집:addSubnet(서브넷.새로운('1.2.3.0/24')) 이 방법은 체인 방식으로 사용할 수 있다.
수집:addSubnet('1.2.0.0/24'):addSubnet('1.2.1.0/24') addFromString
수집:addFromString(발을 동동 구르다) IPv4 주소 및 IPv4 CIDR 서브넷 추출str그리고 그것들을 수집품에 추가했다.IPv4 주소 또는 CIDR 서브넷이 아닌 텍스트는 무시된다.
예:
수집:addFromString('일부 IP 및 서브넷 추가: 1.2.3.5 2001:0::foo 1.2.4.0/24') 이 방법은 체인 방식으로 사용할 수 있다.
수집:addFromString('foo 1.2.3.4'):addFromString('바 5.6.7.8') 포함하다IP
수집:포함하다IP(ip) 컬렉션에 지정된 IP가 포함된 경우 true를 반환하고, 그렇지 않은 경우 false를 반환한다.그ip매개 변수는 문자열 또는 IPAddress 객체일 수 있다.
예:
수집:포함하다IP('1.2.3.4') 수집:포함하다IP(IP 주소.새로운('1.2.3.4')) 겟랑게스
수집:겟랑게스() 컬렉션과 동등한 IP 쌍의 정렬된 배열을 반환한다.각 IP 쌍은 쌍[1]에서 쌍[2]까지 IP 주소의 연속적인 범위를 나타내는 배열이다. 쌍[1]과 쌍[2]은 IPAddress 객체다.
예:
수집:addSubnet('1.2.0.0/24') 수집:addSubnet('1.2.1.0/24') 수집:addSubnet('1.2.10.0/24') mw.logObject(수집:겟랑게스()) -- 다음을 기록한다. -- 테이블#1 { -- 테이블#2 { -- 1.2.0.0, -- 1.2.1.255, -- }, -- 테이블#3 { -- 1.2.10.0, -- 1.2.10.255, -- }, -- } 중복 서브넷
수집:중복 서브넷(서브넷) true, obj ifsubnet이 컬렉션을 겹쳐서, 여기서 obj는 서브넷을 겹치는 첫 번째 IPAddress 또는 서브넷 객체다.그렇지 않으면 거짓을 반환한다. subnetCIDR 문자열 또는 서브넷 개체일 수 있다.
예:
수집:addIP('1.2.3.4') 수집:중복 서브넷('1.2.3.0/24') - true, IPAddress.new('1.2.3.4') 수집:중복 서브넷('1.2.4.0/24') - 거짓 IPv6Collection
IPv6Collection 클래스는 여러 다른 IPv6 주소와 IPv6 서브넷을 사용하는 데 사용된다.IPv6Collection 객체는 IPv4Collection 객체와 직접 유사하며, 동일한 메서드를 포함하고 동일한 방식으로 작동하지만 여기에 추가된 모든 IP 주소와 서브넷은 IPv4가 아니라 IPv6이어야 한다.
새 IPv6Collection 개체를 만드는 방법
국부적 수집 = IPv6Collection.새로운()
-- IP 라이브러리 -- 이 라이브러리에는 IP 주소 및 IP 범위 작업을 위한 클래스가 포함되어 있다. -- 모듈 로드 요구하다('모듈:글로벌 없음') 국부적 비트32 = 요구하다('비트32') 국부적 라이브러리유틸리티 = 요구하다('libraryUtil') 국부적 체크타입 = 라이브러리유틸리티.체크타입 국부적 checkTypeMulti = 라이브러리유틸리티.checkTypeMulti 국부적 makeCheckSelfFunction = 라이브러리유틸리티.makeCheckSelfFunction -- 상수 국부적 V4 = 'IPv4' 국부적 V6 = 'IPv6' -------------------------------------------------------------------------------- -- 도우미 기능 -------------------------------------------------------------------------------- 국부적 기능을 하다 makeValidation함수(className, isObjectFunc) -- 특정 개체의 유효성을 검사하는 함수를 만드십시오. 돌아오다 기능을 하다 (메서드 이름, argIdx, 아그) 만일 아닌 isObjectFunc(아그) 그때 착오(문자열.format( "나쁜 인수 #%d - '%s'(유효한 %s 개체가 아님), argIdx, 메서드 이름, className ), 3) 종지부를 찍다 종지부를 찍다 종지부를 찍다 -------------------------------------------------------------------------------- -- 수집 클래스 -- 이것은 물건을 담을 때 사용하는 테이블이다. -------------------------------------------------------------------------------- 국부적 컬렉션 = {} 컬렉션.__index = 컬렉션 기능을 하다 컬렉션:덧셈을(항목) 만일 항목 ~= 못을 박다 그때 자아의.n = 자아의.n + 1 자아의[자아의.n] = 항목 종지부를 찍다 종지부를 찍다 기능을 하다 컬렉션:합류하다(9월을 보내다) 돌아오다 table.classat(자아의, 9월을 보내다) 종지부를 찍다 기능을 하다 컬렉션:제거하다(양치류) 만일 자아의.n > 0 그리고 (양치류 == 못을 박다 또는 (0 < 양치류 그리고 양치류 <= 자아의.n)) 그때 자아의.n = 자아의.n - 1 돌아오다 table.remove(자아의, 양치류) 종지부를 찍다 종지부를 찍다 기능을 하다 컬렉션:분류하다(콤파스) table.properties(자아의, 콤파스) 종지부를 찍다 기능을 하다 컬렉션:객관화하다() -- 컬렉션을 특별한 속성 없이 일반 배열로 전환 - 또는 방법. 자아의.n = 못을 박다 설정 가능한(자아의, 못을 박다) 종지부를 찍다 기능을 하다 컬렉션.새로운() 돌아오다 설정 가능한({n = 0}, 컬렉션) 종지부를 찍다 -------------------------------------------------------------------------------- -- RawIP 클래스 -- IPv4 또는 IPv6 주소의 숫자 표시.내부적으로 사용함. ­ 원시인IP 개체는 수집 개체에 데이터를 추가하여 생성되며 - 그리고 나서 새로운 맛의 기회를 주는 겁니다.이는 메모리 오버헤드를 피하기 위한 것이다. -- 데이터를 새 테이블에 복사. -------------------------------------------------------------------------------- 국부적 RawIP = {} RawIP.__index = RawIP -- 생성자 기능을 하다 RawIP.newFromIPv4(ipStr) -- Return a RawipStr이 유효한 IPv4 문자열인 경우 IP 개체.그렇지 않으면 ­ 영(0)을 돌려주다. -- 이 표현은 IPv6 주소와의 호환성을 위한 것이다. 국부적 팔분의 일 = 컬렉션.새로운() 국부적 s = ipStr:짝을 맞추다('^%s*(^%)%s*