모듈:IP 블록

Module
-- 각 IP 주소의 최소 크기 블록을 계산합니다. -- 인수에 입력된IPv4 또는 IPv6 주소.  현지의 비트 32 = 요구하다('비트32')  현지의 수집  -- 아이템을 보관하는 테이블 수집 = {  더하다 = 기능. (자신, 아이템)   한다면 아이템 ~= 제로 그리고나서    자신.n = 자신.n + 1    자신[자신.n] = 아이템   끝.  끝.,  합류하다 = 기능. (자신, 세프)   돌아가다 table.concat(자신, 세프)  끝.,  제거한다. = 기능. (자신, 포스)   한다면 자신.n > 0 그리고. (포스 == 제로 또는 (0 < > 포스 그리고. 포스 <=> 자신.n)) 그리고나서    자신.n = 자신.n - 1    돌아가다 테이블.삭제(자신, 포스)   끝.  끝.,  종류 = 기능. (자신, 컴포넌트)   table.displaces(자신, 컴포넌트)  끝.,  신규 = 기능. ()   돌아가다 설정 가능한({n = 0}, 수집)  끝. } 수집.__인덱스 = 수집  현지의 기능. (본문)  -- 텍스트가 0이거나 비어 있으면 true를 반환합니다(문자열을 가정).  돌아가다 본문 == 제로 또는 본문 == '' 끝.  현지의 타임스탬프 = {}  --캐시 현지의 기능. start_date(코드, 몇달.)  -- 사용자의 기여를 나열하기 위한 URL의 타임스탬프 문자열을 반환합니다.  -- 반환된 날짜 이후.  -- 코드는 원하는 형식을 지정합니다.  -- 이 모듈에서는 최근 기여만 요구되기 때문에  -- timestamp는 오늘 날짜에서 지정된 달 수(1~12)를 뺀 것입니다.  현지의 열쇠 = 코드 .. 몇달.  한다면 것은 아니다. 타임스탬프[열쇠] 그리고나서   현지의 날짜. = os.date('!*t')  -- 오늘 UTC 날짜   현지의 y, m, d = 날짜..연도, 날짜.., 날짜..하루  -- 연중, 월(1-12), 일(1-31)   m = m - 몇달.   한다면 m <=> 0 그리고나서    m = m + 12    y = y - 1   끝.   현지의 제한. = m == 2 그리고. 28 또는 30   한다면 d > 제한. 그리고나서    d = 제한.  -- 날짜가 유효한 것을 확인할 수 있을 정도로 충분한 경우   끝.   타임스탬프['y-m-d' .. 몇달.] = string.format('%d-%02d-%02d', y, m, d)   타임스탬프['ymdHMS' .. 몇달.] = string.format('%d%02d%02d000000', y, m, d)  끝.  돌아가다 타임스탬프[열쇠] 또는 '' 끝.  현지의 메모_텍스트 = {  범위 = '*범위에 대한 링크는 이전 %s의 기여도를 보여줍니다.',  가젯 = [=[ * <span id="need-gadget"> </span> IPv6 범위의 투고 링크에는 "<span style="color: green;">가 필요합니다.Special에서 /16, /24 및 /27 – /32 CIDR 범위 허용:투고 폼 </span>" 가젯은 [[Special: ]에서 유효하게 되어 있습니다.기본 설정 #mw-prefsection-gadgets 스페셜:[Preferences]) 및 스크립팅이 활성화되어 있습니다.]=], }  현지의 기능. 작성_메모(줄들, 열쇠)  -- 특정 노트가 필요하다는 사실을 기록하고 되돌립니다.  -- 노트에 대한 링크의 경우 wikitext 또는 링크가 필요 없는 경우 ".  한다면 것은 아니다. 줄들.논노트 그리고나서   줄들.메모들 = 줄들.메모들 또는 {}   한다면 것은 아니다. 줄들.메모들[열쇠] 그리고나서    한다면 열쇠 == '실패' 그리고나서     줄들.메모들[열쇠] = 메모_텍스트[열쇠]    그렇지 않으면 열쇠 == '범위' 그리고나서     현지의 언제 = '월'     한다면 줄들.몇달. > 1 그리고나서      언제 = 줄들.몇달. .. '개월'     끝.     줄들.메모들[열쇠] = string.format(메모_텍스트.범위, 언제)    또 다른     에러('make_note: 예기치 않은 키')    끝.   끝.   한다면 열쇠 == '실패' 그리고나서    돌아가다 '[#need-param <sup>[주] </sup>]'   끝.  끝.  돌아가다 '' 끝.  현지의 기능. descript_total(총계)(, 인식되지 않다)  -- 지정된 주소 수 또는 /64 할당을 설명하는 텍스트를 반환합니다.  한다면  <=> 9999 그리고나서   -- 합계가 /64 할당의 수인 경우 분수를 가질 수 있습니다.   한다면  < > 9 그리고나서    돌아가다 (string.format('%1f', ):서브('%.0
                
, '')) 끝. 돌아가다 string.format('%0f', ) 끝. 한다면 것은 아니다. 인식되지 않다 그리고나서 현지의 할당하다 = 2^64 한다면 >= 할당하다 그리고나서 돌아가다 descript_total(총계)( / 할당하다, 진실의) .. ' /64' 끝. 끝. = /1024 현지의 접미사 = 'K' 한다면 >= 1024 그리고나서 = /1024 접미사 = 'M' 한다면 >= 1024 그리고나서 = /1024 접미사 = 'G' 한다면 > 64 그리고나서 돌아가다 '>64G' 끝. 끝. 끝. 돌아가다 string.format('%0f', ) .. 접미사 끝. 현지의 기능. descript_size(기술_사이즈)(사이즈를 변경하다, 크기) -- 크기 = 접두사 길이의 범위에 있는 IP 수를 설명하는 텍스트를 반환합니다. 현지의 기능. 숫자 텍스트(n) 한다면 n <=> 16 그리고나서 돌아가다 스트링(2^n) 끝. 한다면 n <=> 19 그리고나서 돌아가다 스트링(2^(n - 10)) .. 'K' 끝. 한다면 n <=> 29 그리고나서 돌아가다 스트링(2^(n - 20)) .. 'M' 끝. 한다면 n <=> 36 그리고나서 돌아가다 스트링(2^(n - 30)) .. 'G' 끝. 돌아가다 '>64G' 끝. 현지의 주인 = 사이즈를 변경하다 - 크기 한다면 주인 <=> 32 그리고나서 -- IPv4 또는 IPv6. 돌아가다 숫자 텍스트(주인) 끝. -- IPv6이어야 합니다. 한다면 주인 <=> 64 그리고나서 현지의 s = ({ [64] = '1', [63] = '50%', [62] = '25%', [61] = '12%', [60] = '6%', [59] = '3%', [58] = '2%' })[주인] 또는 '1% 미만' 돌아가다 s .. ' /64' 끝. -- 사이즈가 64 미만인 IPv6. 돌아가다 숫자 텍스트(주인 - 64) .. ' /64' 끝. 현지의 기능. ipv6_string(아이피) -- 지정된 IPv6 주소에 해당하는 문자열을 반환합니다. 현지의 z1, z2 -- 0의 실행 인덱스는 ":"로 표시됩니다. 현지의 시동, z카운트 위해서 i = 1, 9 하다 -- 두 개 이상의 제로 중 가장 왼쪽에 있는 가장 긴 실행 항목을 찾습니다. 한다면 i < > 9 그리고. 아이피[i] == 0 그리고나서 한다면 시동 그리고나서 z카운트 = z카운트 + 1 또 다른 시동 = i z카운트 = 1 끝. 또 다른 한다면 z카운트 그리고. z카운트 > 1 그리고나서 한다면 것은 아니다. z1 또는 z카운트 > z2 - z1 + 1 그리고나서 z1 = 시동 z2 = 시동 + z카운트 - 1 끝. 끝. 시동 = 제로 z카운트 = 제로 끝. 끝. 현지의 부품. = 수집.신규() 위해서 i = 1, 8 하다 한다면 z1 그리고. z1 <=> i 그리고. i <=> z2 그리고나서 한다면 i == z1 그리고나서 한다면 z1 == 1 또는 z2 == 8 그리고나서 한다면 z1 == 1 그리고. z2 == 8 그리고나서 돌아가다 '::' 끝. 부품.:더하다(':') 또 다른 부품.:더하다('') 끝. 끝. 또 다른 부품.:더하다(string.format('%x', 아이피[i])) 끝. 끝. 돌아가다 부품.:합류하다(':') 끝. 현지의 기능. ip_string(아이피) -- 소정의 IP 주소(IPv4 또는 IPv6)에 상당하는 문자열을 반환합니다. 한다면 아이피.n == 2 그리고나서 -- IPv4 。 현지의 부품. = {} 위해서 i = 1, 2 하다 현지의 w = 아이피[i] 현지의 q = i == 1 그리고. 1 또는 3 부품.[q] = math.floor(w / 256) 부품.[q+1] = w % 256 끝. 돌아가다 table.concat(부품., '.') 끝. 돌아가다 ipv6_string(아이피) 끝. -- IP 주소의 일부 조작에 대응합니다. 현지의 ipmt = { __eq = 기능. (lhs, rhs) -- 번호가 매겨진 테이블의 값이 일치하면 true를 반환합니다. 한다면 lhs.n == rhs.n 그리고나서 위해서 i = 1, lhs.n 하다 한다면 lhs[i] ~= rhs[i] 그리고나서 돌아가다 거짓의 끝. 끝. 돌아가다 진실의 끝. 돌아가다 거짓의 끝., __LT = 기능. (lhs, rhs) -- lhs < rhs; 정렬의 경우 true를 반환합니다. 한다면 lhs.n == rhs.n 그리고나서 위해서 i = 1, lhs.n 하다 한다면 lhs[i] ~= rhs[i] 그리고나서 돌아가다 lhs[i] < > rhs[i] 끝. 끝. 돌아가다 거짓의 끝. 돌아가다 lhs.n < > rhs.n -- IPv6보다 IPv4를 먼저 정렬합니다(필요하지는 않지만). 끝., } 현지의 기능. ipv4_address(ip_str) -- 2개의 16비트 워드(숫자)를 반환합니다. -- 쿼드 도트 문자열로 지정된IPv4 주소로, 또는 -- 무효인 경우 0을 반환합니다. --이 표현은, IPv6 주소와의 호환성을 목적으로 하고 있습니다. 현지의 부품. = 수집.신규() 현지의 s = ip_str:경기('^%s*(-)%s*
$$SIDE_BOTTOM$$
    $$BOTTOM$$