모듈 토크:아이피
Module talk| 이 모듈은 2018년 7월 1일에 삭제가 검토되었습니다.토론의 결과는 "유지"였다. |
계획
WP:Lua(permalink)에서 논의한 결과 범용 IP 주소 핸들러 계획으로 이 모듈을 작성하게 되었습니다.모듈:IPblock({blockcalc}}을 구현)에는 텍스트 인수에서 IPv4 및 IPv6 IP를 추출하여 텍스트 표시용으로 IP를 변환할 수 있는 함수가 포함되어 있으며 특정 IP에 대해 사용 가능한 최적의 CIDR 블록 요약을 결정하는 등 다양한 계산을 수행할 수 있습니다.
범용 IP 핸들러를 탑재하는 장점 외에 즉시 필요한 것은 {{Sensitive IP addresses}}에서 목록을 생성하여 MediaWiki에서 사용하는 동일한 정보를 출력할 수 있는 모듈입니다.group-sysop.js.
모듈의 기능을 검토하고 있습니다.IP block은 여기서 사용할 수 있을 것 같고, 이것이 저의 예비 생각입니다.CIDR 블록의 범용 처리는 까다로우므로 구현이 용이하도록 제한을 두었습니다.모듈에서는 개개의 IP(IPv4 및 IPv6) 및 CIDR 블록(IPv4 만, 및 IP/n 형식(n 은 16 ~32, 즉 65,536 주소 이하)을 받아들입니다.모듈은 IP를 v4용과 v6용 두 가지 목록에 넣은 후 각 목록을 처리합니다.각 목록이 정렬되고 중복 IP가 제거됩니다(사용자에게 유용하고 요약을 만드는 데 사용되는 방법에 필요).그런 다음 요약이 생성되고 결과가 표에 표시됩니다.
중요한 점은 각 CIDR 블록이 개별 IP로 확장된다는 것입니다.예를 들어 1.2.3.224/27은 32개의 개별 주소(1.2.3.4.224~1.2.3.4.255 포함)로 확장됩니다.이는 요약을 작성하기 위해 사용되는 방법에는 개별 IP 목록이 필요하기 때문입니다.
CIDR 블록을 확장하지 않고 작업할 수 있지만, 코드 복잡성이 해소될 것으로 예상되며, 이미 상당히 치열합니다.
모듈의 개요:IP도 훌륭하고 처음에는 그런 것도 생각했지만 실용주의가 나를 압도해 {{blockcalc}}에 필요한 일을 했습니다.보다 일반적인 모듈도 좋지만 제안된 방법 중 일부는 구현하기 어려울 수 있습니다.IPBlock remove를 생각하고 있습니다.IP: 입력이 1.2.3.224/27이고 1.2.3.243이 삭제되면 31개의 IP가 생성됩니다.이 결과는 blockcalc로 나타나듯이 4개의 CIDR 블록과1개의 IP로 요약할 수 있습니다(이것은 31개의 IP를 {blockcalc}에 전달한 결과입니다).
정렬된 31개의 IPv4 주소:
- 1.2.3.224 – 1.2.3.242
- 1.2.3.244 – 1.2.3.255
| 총 영향받은 | 영향받은 어드레스 | 정해진 어드레스 | 범위 | 투고 |
|---|---|---|---|---|
| 32 | 32 | 31 | 1.2.3.224/27 | 투고 |
| 31 | 16 | 16 | 1.2.3.224/28 | 투고 |
| 2 | 2 | 1.2.3.240/31 | 투고 | |
| 1 | 1 | 1.2.3.242 | 투고 | |
| 4 | 4 | 1.2.3.244/30 | 투고 | |
| 8 | 8 | 1.2.3.248/29 | 투고 | |
모듈은 각 개별 IP 목록을 보관해야 합니다(어떤 모듈:IP block) 또는 블록목록을 유지합니다.가능하지만 어색합니다.
구현을 시작하기 전에 계획에 대해 논의할 수 있을까요?추가하다IP 및 삭제IP를 원하십니까?임의의 수의 IP에 대해서?
실용적 측면에서도 구현 노력이 가치가 있는지, 실제로 활용될 수 있는지 궁금해하고 있습니다.기밀 IP 요건은 범용성이 필요하지 않을 수 있으며 IP 주소를 처리할 수 있는 모듈이 전혀 필요하지 않을 수 있습니다(js 출력에 무엇이 필요한지 검토하지 않았습니다).Johnuniq (대화) 2016년 7월 14일 11:03 (UTC)
- @Johnuniq:시간을 내주셔서 감사합니다.JavaScript 측면의 기능에 관해서는 다음 사항을 알아야 합니다.
- 관리자가 차단하려는 IP가 중요한 범위 내에 있는지 여부
- 관리자가 차단하려는 IP 범위가 중요한 범위와 겹치는지 여부
- 기밀 범위에 대한 설명
- 기밀 범위 내의 CIDR 블록 리스트
- 처음 두 개만 라이브러리를 포함하면 됩니다.IP가 특정 범위 내에 있는지(즉, IPblock의 obj:containsIP), 두 개의 IP 블록이 서로 겹치는지 여부를 알 필요가 있습니다.나머지는 모듈이 수행할 수 있습니다.기밀 IP 주소
또한 {{blockcalc}}의 기능을 시연해 주셔서 감사합니다.처음 생각했던 것보다 더 인상적이네요!모듈에서 기능을 이동할 때 어떤 작업이 필요한지 알게 되었기 때문에 앞으로 나아가야 할 방향에 대해 두 가지 생각을 하게 되었습니다.이 라이브러리의 IP 차단.
- 옵션 1: 라이브러리를 작게 유지하고 여러 모듈 간에 공유되는 기능만 구현합니다.IPBlock 클래스에는 개별 IP가 저장되지 않고 프리픽스와 비트 길이만 저장됩니다.
- 옵션 2: 모듈에서는 더 많은 기능을 통합합니다.라이브러리에 IP 차단합니다.1개의 IPBlock 클래스가 아닌 IPBlock과 서브넷의 2개의 클래스가 있습니다.IPBlock 클래스에는 개개의 IP가 저장되어 있어 추가 및 삭제가 가능하며 최대 65,536개의 주소를 사용할 수 있습니다.서브넷 클래스는 옵션1의 IPBlock 클래스와 비슷하며 프리픽스와 비트 길이만 저장됩니다.
- 그것을 모두 타이핑하고 나서, 나는 앞으로 나아갈 길이 더 명확해졌다고 생각한다.처음에는 IPAddress와 서브넷클래스를 실장해야 한다고 생각합니다.이후 Module을 쓸 수 있습니다.기밀 IP 주소입니다.나중에 필요하다고 판단되면 IPBlock 클래스를 실장할 수 있습니다.(아마도 같은 기능을 필요로 하는 다른 모듈을 쓸 필요가 있는 경우)다른 이름을 선택해야 할 수도 있습니다.IPClection과 같은 것이 오브젝트가 개별 IP를 보유하여 더 작은 블록으로 분할할 수 있음을 나타내는 데 IPBlock보다 나을 수 있습니다.이 모든 것에 대해 생각해 보고 내일 중으로 인터페이스의 다른 개요를 설명하겠습니다.- Stradivarius님 2016년 7월 14일 (UTC[응답
IPAddress를 거의 완성하기 위해 몇 가지 기능을 추가했습니다.아웃라인 작업을 위해 최소한의 변경으로 그것들을 끼워 넣었을 뿐입니다. 스타일리쉬하게 마사지해 주세요.다음과 같이 하면 됩니다.
IPAddress = required('모듈:IP').IPAddress ip1 = IPAddress.new('1.2.3.4') ip2 = IPAddress.new('12.34.56.78')') ip3 = IPAddress.new(01:002:3:0004:') ip1 <2> true(문자열) 앞으로 2, 3일 안에 다른 대부분의 일을 할 수 있을 거예요.상단 근처에 있는 "메모" 섹션을 참조하십시오.Johnuniq (대화) 2016년 7월 15일 12:36 (UTC)
@Stradivarius씨:새로운 tostring 코드를 사용하도록 getIP()를 변경했습니다.즉, 발신자가 제공한 텍스트와 다를 수 있는IP 주소의 정규화된 문자열 표현을 반환합니다.좋은 생각이라고 생각합니다만, 그 이유는 getNext의 도입을 용이하게 하기 위해서입니다.IP 및 getPreviousIP. 이제 주어진 번호표를 사용하여 새 IP를 구성할 수 있으므로 더 쉽습니다.이를 수행할 수 있는 것은 메서드뿐입니다.클라이언트 프로그램은 IPAddressuniqueId 변수에 액세스할 수 없기 때문에 getNext에서 사용되는 트릭을 사용할 수 없습니다.IP입니다. 새로운 코드를 통합할 수 있는 더 좋은 방법이 있다면 알려주세요.
TODO 항목을 참조하십시오.원하는 경우 스타일을 지금 수정하거나 나중에 수정하십시오.제가 원하는 것은 첫 번째 TODO에 대한 의견입니다.이 포인트는 수정해야 하며 서브넷이 수정되면 isInSubnet을 구현해야 합니다.그러면 IPAddress가 완료됩니다.생각합니다.
모듈을 보았습니다.IP/테스트 케이스이지만 모듈도 만들었습니다.임시 테스트용 Sandbox/Johnuniq/ip.모듈 토크에서 결과를 참조하십시오.샌드박스/Johnuniq/ipJohnuniq (토크) 07:41, 2016년 7월 16일 (UTC)
- 신음해, 봐야겠어.클라이언트는 IPAddress에 액세스 할 수 있습니다.확실히 비공개인 uniqueId로 변경했습니다.아직 올리지도 않았고, 슬러지를 피할 수 있는 좋은 방법이 있을지도 몰라.Johnuniq (토크) 03:16, 2016년 7월 17일 (UTC)
- 답장이 늦어서 죄송합니다. 며칠간 바빴습니다.우선, 나는 동의해.IP()는 IP의 정규화된 문자열 표현을 반환해야 합니다.출력을 예측 가능한 형식으로 유지하는 것이 라이브러리의 재이용자에게 도움이 될 것으로 기대하며, 원래 입력 문자열이 필요한 경우 언제든지 변수에 저장할 수 있습니다.get에 대해서는IPParts()는 좀 못생겼죠.이상적으로는 구현 세부사항을 공개하지 않는 것이 좋습니다.더 좋은 방법이 없을까 생각해 보겠지만, 지금 당장은 생각이 나지 않는다.IPAddress.new 내에서 metable 정의를 이동하는 것이 좋을 것 같지만 mt라는 단점이 있습니다.__eq가 더 이상 작동하지 않음 -
__eq를 사용하려면 비교중인 두개체가 동일한 측정가능을사용해야 합니다.좀 더 생각해 보겠습니다.나도 스타일을 좀 더 균일하게 만들어 볼 거야.- Stradivarius님♪ talk ♪ 2016년 7월 17일 12:15 (UTC)]- 사실, 제가 그걸 잘못 알고 있는 것 같아요.__eq는 함수가 비교되는 두 개체에 대해 동일한 함수 개체여야 하며 메타 테이블 자체는 다를 수 있습니다.이것에 대해 좀 더 생각해 봅시다.- Stradivarius님♪ talk ♪ 13:17, 2016년 7월 17일 (UTC)
- 좋아, 효과가 있는 방법을 찾았어고유 키를 사용하여 IPAddress.new 내에 __index 메타메타모드를 설정하면 고유 키를 인식하는 모든 코드의 데이터 업밸류에 액세스할 수 있습니다.고유한 키에 액세스할 수 없는 코드는 쌍 또는 getmetable을 사용하더라도 데이터 테이블에 도달할 수 없습니다.신뢰할 수 없는 코드는 새로운 메타테이블을 설정하여 메타모드를 파괴할 수 있지만 그래도 데이터에 액세스할 수 없습니다.- Stradivarius님♪ talk ♪, 2016년 7월 17일 (UTC)
- 새로운 dataKey는 매우 훌륭하지만, 진지하게 생각해보고 정확히 어떻게 사용되는지 알아내려면 몇 시간이 걸릴 것입니다.현재 모듈 작업은 완료되었습니까?uniqueId가 누락되어 있습니다(일부 코드는 아직 사용되고 있습니다.생각해 보면 어떤 계획을 세웠는지 알 수 있을 것 같습니다).또한 getIPParts는 아직 코드 내에 존재하며 정의되지 않은 것이 모듈토크에서 현재 표시되는 오류의 원인일 수 있습니다.샌드박스/Johnuniq/ipJohnuniq (토크) 23:56, 2016년 7월 17일 (UTC)
- 좋아, 효과가 있는 방법을 찾았어고유 키를 사용하여 IPAddress.new 내에 __index 메타메타모드를 설정하면 고유 키를 인식하는 모든 코드의 데이터 업밸류에 액세스할 수 있습니다.고유한 키에 액세스할 수 없는 코드는 쌍 또는 getmetable을 사용하더라도 데이터 테이블에 도달할 수 없습니다.신뢰할 수 없는 코드는 새로운 메타테이블을 설정하여 메타모드를 파괴할 수 있지만 그래도 데이터에 액세스할 수 없습니다.- Stradivarius님♪ talk ♪, 2016년 7월 17일 (UTC)
- 사실, 제가 그걸 잘못 알고 있는 것 같아요.__eq는 함수가 비교되는 두 개체에 대해 동일한 함수 개체여야 하며 메타 테이블 자체는 다를 수 있습니다.이것에 대해 좀 더 생각해 봅시다.- Stradivarius님♪ talk ♪ 13:17, 2016년 7월 17일 (UTC)
- 답장이 늦어서 죄송합니다. 며칠간 바빴습니다.우선, 나는 동의해.IP()는 IP의 정규화된 문자열 표현을 반환해야 합니다.출력을 예측 가능한 형식으로 유지하는 것이 라이브러리의 재이용자에게 도움이 될 것으로 기대하며, 원래 입력 문자열이 필요한 경우 언제든지 변수에 저장할 수 있습니다.get에 대해서는IPParts()는 좀 못생겼죠.이상적으로는 구현 세부사항을 공개하지 않는 것이 좋습니다.더 좋은 방법이 없을까 생각해 보겠지만, 지금 당장은 생각이 나지 않는다.IPAddress.new 내에서 metable 정의를 이동하는 것이 좋을 것 같지만 mt라는 단점이 있습니다.__eq가 더 이상 작동하지 않음 -
서브넷
add IP(...)와 add IP에 대해 알고 싶습니다.IP From String(복수 가능)그 이름들은 원래 아이디어에서 나온 건가요?서브넷에 대한 제 이해와 어떻게 관련이 있는지 알 수 없습니다.또한 Subnet.new(옵션)의 "옵션"이란 무엇입니까?Subnet.new(ip)가 필요한 것으로 생각됩니다.여기서 ip는 "1.2.3.0/24"와 같은 CIDR 문자열입니다.그리고 추가IP 및 추가IPsFromString이 삭제됩니까?서브넷에 필요한 것만 있으면 아마 하루 정도 안에 작업을 완료할 수 있을 거예요.나중에 add를 확인할 수 있습니다.IPsFromString 기타Johnuniq (토크) 09:47, 2016년 7월 16일 (UTC)
- add IP(...)의 배후에 있는 아이디어는 다음과 같은 작업을 수행할 수 있다는 것입니다.
addIPs('1.2.3.0', '1.2.3.1', '1.2.3.255')새로운 IP가 서브넷 내에 없는 경우 프리픽스와 비트 길이가 재계산되어 새로운 IP가 통합됩니다.add를 추가합니다.IPsFromString(s)은 동일하지만 다음과 같은 문자열에서 생성됩니다.addIPsFromString('1.2.3.0 1.2.3.1 1.2.3.255'). addIP(...)는 문자열뿐만 아니라 IPAddress 객체도 받아들입니다.이 기능은 실제로 필요하지 않을 수도 있지만, 구현은 그다지 번거롭지 않을 것입니다.나는 그것에 대해 망설이고 있다.Subnet.new(옵션)의 "options"는 명명된 인수 테이블입니다.제 원래 생각은Subnet.new('1.2.3.0/24'),Subnet.new('1.2.3.0', '1.2.3.1', '1.2.3.255')그리고.Subnet.new('1.2.3.0 1.2.3.1 1.2.3.255')다만, 후자를 허가하는 경우, 모듈은, 다음과 같은 것을 해석하기 위해서, IPv4 주소 또는 IPv6 주소의 어느 쪽을 필요로 하는지를 인식할 필요가 있습니다.Subnet.new('1.2.3.0 01:002:3:0004:: 1.2.3.255')그래서 이런 게 필요할 것 같아서Subnet.new{ IPs = '1.2.3.0 01:002:3:0004:: 1.2.3.255', version = 'IPv4' }하지만 제가 일을 너무 복잡하게 만들고 있는 것 같습니다.Stradivarius님♪ talk ♪ 2016년 7월 17일 12:36 (UTC)- 방금 모듈을 업데이트했습니다.IP 및 모듈:Sandbox/Johnuniq/ip (모듈 토크에서의 결과:Sandbox/Johnuniq/ip)대부분 완료되었지만, 매우 급해서 확인/교체하겠습니다.답장 감사합니다만, 저는 지금 가봐야 해서 고민할 수가 없습니다.나중에 다시 올게요.Johnuniq (토크) 13:02, 2016년 7월 17일 (UTC)
기능이 필요한 경우 모듈의 코드를 사용하여 쉽게 구현할 수 있습니다.IP 블록: IP 목록에 의해 공유되는 공통 프리픽스비트 수를 계산합니다.한 가지 문제는 이러한 함수가 서브넷을 변경할 수 있다는 것입니다.그건 괜찮지만 실장에서는 모든 필수 필드가 설정되도록 주의가 필요합니다.다른 방법으로는 다른 컨스트럭터를 사용할 수 있습니다(순수한 방법으로는 할 수 없습니다).서브넷은 CIDR 스트링에서 구축하거나 IP 스트링 목록에서 구축하거나 2개의 서브넷의 결합에서 구축할 수 있습니다.Johnuniq (대화) 2016년 7월 18일 08:11 (UTC)
내부 IP 표현
IP의 내부 표현에 대해 궁금한 점이 있습니다.왜 각 부분의 비트 길이를 32비트가 아닌 16비트로 했습니까?Lua 의 배정도 플로트는, 약 -2^53 ~2^53 의 정수를 정확하게 나타낼 수 있을 필요가 있습니다(정확한 컷오프를 잊어버렸습니다).따라서, IPv4 주소는 1 개의 Lua 번호에 들어가, IPv6 주소는 4 개의 Lua 번호의 테이블에 들어가 있을 필요가 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 17일 (UTC)
- 나는 무엇이 실천에 가장 적합한지 보기 위해 나란히 비교가 필요하다고 생각한다.다만, IPv6 의 조작이 용이하게 되어, 32 비트가 사용되고 있는 경우는, 내부 표현을 텍스트로 변환하기 위해서 많은 계산이 필요하기 때문에, 편의상 부분적으로 16 비트를 선택했습니다.더 무거운 두 번째 포인트는 비트 단위 연산을 에뮬레이트하는 코드가 한 번에 16비트를 작동시키는 것이 더 효율적이라는 직감입니다.copyPrefix 및 setHostBits를 참조하십시오.또한 모듈의 common_length 함수:IPblock은 2개의 IP가 공통으로 가지는 프리픽스비트의 수를 판별하기 위해서 자주 사용됩니다.또, 16비트를 사용해 한 번에 응답할 수 있습니다.18비트라고 하는 답이 있는 경우는, 최초의 16비트에 대해 매우 간단한 계산을 실시해, 다음의 2비트가 공통이라고 판단하기만 하면 됩니다.한 번에 32비트를 작동시키면 효율이 좀 떨어질 것 같습니다.Johnuniq (토크) 23:39, 2016년 7월 17일 (UTC)
- 설명해주셔서 감사합니다.그게 말이 되네.굳이 비교해야 한다면 나란히 비교할 수도 있겠지만, 그럴 필요는 없을 것 같습니다.- Stradivarius님♪ talk ♪ 2016년 7월 18일 02:28 (UTC)
메모리 효율
메모리에 들어갈 수 있는 IPAddress 객체가 몇 개인지 테스트해 봤어요.이 메서드를 컨스트럭터 안에 직접 넣으면 메모리 내에 들어가는 객체가 훨씬 적다는 것은 놀랄 일도 아닙니다.컨스트럭터 내의 메서드를 사용한 버전에서는 Scribunto "not enough memory" 오류가 발생하기 전에 19,456개의 오브젝트를 메모리에 삽입할 수 있었습니다.메서드를 컨스트럭터 밖으로 이동시키면서 __index를 사용하여 데이터 테이블을 비공개로 유지했을 때 39,168로 늘릴 수 있었습니다.그리고 컨스트럭터 밖으로 메터블을 옮겨 데이터를 공개했을 때(밑줄 포함) 65,536개의 오브젝트를 메모리에 저장할 수 있었습니다.섣부른 최적화가 모든 악의 근원이라는 것을 알고 있기 때문에 데이터를 공개하고 밑줄을 사용하려는 유혹을 뿌리치고 싶습니다.다만, IPAddress를 세컨드 스타일로 바꾸는 것의 큰 단점은 생각나지 않습니다.당신은 어떻게 생각하나요?- Stradivarius님♪ talk ♪ 2016년 7월 18일 02:21 (UTC)]
- 사실 방금 생각난 게 하나 있어요.컨스트럭터의 메서드를 사용하면 발신자가 콜론 구문을 올바르게 사용하고 있는지 체크할 수 있지만 메서드의 업값으로 오브젝트를 사용할 수 없는 한 불가능합니다.- Stradivarius님♪ talk ♪ 2:32, 2016년 7월 18일 (UTC)
- 말씀하신 여러 가지 실험을 소화하려면 시간이 좀 필요합니다.업밸류가 각각 36바이트를 소비하는 것은 유감입니다.순도 + Lua + Scribunto 메모리 제한은 있을 수 없는 것 같습니다.모듈을 참조하는 것은 권장하지 않습니다.날짜. 하지만 관심사로서 그것은 순결성이 매우 낮지만 합리적인 아이디어를 사용한다.날짜 함수는 측정 가능이 있는 단순한 날짜 테이블을 반환합니다.기묘한 내부로 날짜를 바꾸는 것은 어렵지만, (원하는 경우 다른 날짜를 변경함으로써) 날짜를 쉽게 만들 수 있기 때문에, 저는 데이트가 불변하기를 원했습니다.따라서 날짜 개체를 읽기 전용으로 만들기 위해 트릭을 사용했습니다('읽기 전용' 검색: 날짜 정보는 새 날짜 테이블에 있습니다).샌드박스 모듈을 재사용했습니다(모듈:Sandbox/Johnuniq/testpre)를 사용하여 36,000개의 날짜 테이블을 작성합니다.Lua 메모리 사용량은 47.59 MB/50 MB입니다(결과는 발표되고 있습니다).
- 모듈: 날짜에는 checkSelf 대신 is_date 함수를 사용합니다.클라이언트는 다음 행 중 첫 번째 두 줄과 같은 작업을 수행해야 합니다.세 번째 줄은 표시된 오류를 생성합니다.
local date = Date('2016-07-18') local s = date:text() local s = date.text() date: 필요 날짜(콜론과 함께 "date:text()" 사용) IPAddress의 getHighestIP 및 getPrefix
IP 주소의 은유를 깨는 것은 getHighest를 통해IPAddress의 IP 메서드 및 getPrefix 메서드.예를 들어, IP 주소는 IP가 가장 높지 않습니다. IP는 1개뿐입니다.특정 IP 주소에서 서브넷 내에서 가장 높은 IP를 찾는 경우 인터페이스 관점에서ip:getSubnet(bitLength):getHighestIP()보다 더 말이 될 것이다ip:getHighestIP(bitLength) 서브넷 클래스를 정리한 방법을 보면 이러한 메서드를 삭제하는 것만으로 문제가 발생한다는 것을 알 수 있습니다.IPAddress.new뿐만 아니라 IP 부품에서 직접 새로운 IPAddress 객체를 만드는 방법이 필요할 것 같습니다.나는 우리가 새로운 것이 필요하다고 생각한다.IPAddress.new에 의해 호출되며 서브넷에서 액세스할 수 있지만 발신자가 액세스할 수 없는 IPAddress 함수.좀 더 생각해 볼게요.- Stradivarius님♪ talk ♪ 2016년 7월 18일 03:22 (UTC)
- 네, makeSubnet은 IP의 일부에서 IP를 구성하는 방법이 필요합니다.당신이 디자인을 결정할 기회가 생길 때까지 저는 더 많은 편집을 하는 것이 좋습니다.당신이 쉬고 싶다면, 새로운 걸 찾아볼게요.IPAddress는 그렇게 보일 수 있지만, 조용한 사고 시간을 확보하기 위해 며칠이 필요합니다.당신이 말한 것은 맞지만, makeSubnet의 관점에서 보면, 그것은 IP 오브젝트를 가지고 있기 때문에 첫 번째 IP를 기반으로 다른 IP를 구축해야 합니다.요약:
local base = IPAddress.new(lhs) -- "IP/n" 로컬 접두사 = base:getPrefix(n) -- 기본 데이터의 호스트 비트를 지우는 IP.highestIP = base: getHighestIP(n) -- 기본에서 호스트 비트를 설정하는 IP
서브넷 데이터 키
서브넷에 data Key가 필요 없게 된 것 같습니다.대신 metatable을 사용하여 인수가 서브넷개체임을 확인할 수 있습니다.다음은 수행될 수 있는 작업의 개요입니다.
-- 서브넷 클래스 -- 로컬 dataKey = {} 대신 로컬 mt = { __eq = 함수(self, obj)가 self:getCIDR() end, __tostring = 함수(self)를 반환하고 local:getCIDR()를 변경하도록 할 수 있습니다.return type(val) == 'table' 및 getmetable(val) == mt end -- 및 mt return setmetable(obj, mt)을 사용합니다. 그냥 생각일 뿐이야!Johnuniq (토크) 10:43, 2016년 7월 21일 (UTC)
- 좋은 생각이야!그럼 그렇게 하겠습니다.사실, 우리는 확인할 필요도 없다.
type(val) == 'table'getmetable은 non-metable을 반환할 뿐이기 때문입니다.- Stradivarius님♪ talk ♪, 2016년 7월 21일 (UTC)- 음. 방금 이 방식의 단점을 생각해 봤습니다.신뢰할 수 없는 코드가 서브넷오브젝트에 새로운 메타블을 설정하면 isSubnetObject의 기능에 영향을 주고 서브넷과 IPAddress의 내부에도 영향을 줄 수 있습니다.이 문제를 해결하기 위해 __metable로 할 수 있는 일이 있을 수도 있지만, 고유한 업밸류가 더 나을 수도 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 21일 14:19 (UTC)]
- 재밌다...참조 매뉴얼에서 getmetable을 읽은 적은 있지만, getmetable(x)은 항상 유효하며, x가 metable이 있는 테이블이 아닌 한 0을 반환한다는 것을 의미한다는 생각은 들지 않았습니다.
신뢰할 수 없는 클라이언트가 무엇을 할지에 대해서는 크게 걱정하지 않습니다.특권을 상승시켜 모듈을 사용할 수 있는 것은 아닙니다.이미 할 수 없는 일을 하기 위한 IP입니다.단, 오브젝트가 서브넷임을 보증하는 간단한 절차를 사용할 수 있는 경우에는 서브넷을 사용해야 한다는 데 동의합니다.위에서 붙여넣은 코드를 파기하려면 클라이언트가 서브넷개체를 취득하고 getmetable을 사용하여 mt를 취득한 후 새 테이블에 설정하고 모듈을 크래시할 수 있도록 서브넷메서드에 전달해야 합니다.IP. Lua 스크립트는 일반적으로 그런 것에 신경 쓰지 않습니다.mt 변수는 uniqueKey 접근법에서는 필요하지 않으므로 삭제하는 것이 좋습니다.
어쨌든, 현재의 모듈은 아름다우니, 깨끗한 수업을 받는 데 있어서 훌륭한 성과를 거둔 것을 축하드립니다!현재 필요한 IP 또는 서브넷 기능이 있으면 알려주세요.Johnuniq (대화) 2016년 7월 22일 01:07 (UTC)
- (편집 충돌)친절한 말씀 감사합니다.신뢰할 수 없는 클라이언트에 대해 너무 걱정하지 않는 것이 좋을 것 같습니다만, __metable을 설정하는 것은 쉬운 수정이 되었기 때문에, 그것만 사용해도 문제는 없다고 생각합니다.단, mt 변수 또는 서브넷의 동등성을 테스트하는 함수를 업값으로 유지해야 합니다. __eq 함수는 동등한 어나니머스 함수가 아니라 테스트 대상 양쪽 객체에 대해 완전히 같아야 합니다.우리가 구현할 수 있는 새로운 방법에 대한 몇 가지 아이디어는 있었지만, 얼마나 유용할지는 잘 모르겠습니다.특별한 순서 없이 다음 방법을 사용할 수 있습니다.
- 서브넷에서 가능한 호스트 수 가져오기
- 호스트 비트 수 가져오기
- 두 서브넷이 인접해 있는지 확인
- 서브넷의 작은 서브넷에 걸쳐 반복
- 동일한 비트 길이의 다음 서브넷 가져오기
- 두 개 이상의 IP 주소에서 서브넷 개체 생성(메서드가 아닌 생성자)
- 하나 이상의 IP 주소가 지정된 서브넷 확장
- 하나 이상의 서브넷이 지정된 서브넷 확장
- 그러나 실제로 사용할 수 있는 경우에는 그 중 하나만 구현해야 합니다.다른 의견이 있으시면, 저는 경청하겠습니다!- Stradivarius님 12:08, 2016년 7월 22일 (UTC)
- (편집 충돌)친절한 말씀 감사합니다.신뢰할 수 없는 클라이언트에 대해 너무 걱정하지 않는 것이 좋을 것 같습니다만, __metable을 설정하는 것은 쉬운 수정이 되었기 때문에, 그것만 사용해도 문제는 없다고 생각합니다.단, mt 변수 또는 서브넷의 동등성을 테스트하는 함수를 업값으로 유지해야 합니다. __eq 함수는 동등한 어나니머스 함수가 아니라 테스트 대상 양쪽 객체에 대해 완전히 같아야 합니다.우리가 구현할 수 있는 새로운 방법에 대한 몇 가지 아이디어는 있었지만, 얼마나 유용할지는 잘 모르겠습니다.특별한 순서 없이 다음 방법을 사용할 수 있습니다.
- 재밌다...참조 매뉴얼에서 getmetable을 읽은 적은 있지만, getmetable(x)은 항상 유효하며, x가 metable이 있는 테이블이 아닌 한 0을 반환한다는 것을 의미한다는 생각은 들지 않았습니다.
- 음. 방금 이 방식의 단점을 생각해 봤습니다.신뢰할 수 없는 코드가 서브넷오브젝트에 새로운 메타블을 설정하면 isSubnetObject의 기능에 영향을 주고 서브넷과 IPAddress의 내부에도 영향을 줄 수 있습니다.이 문제를 해결하기 위해 __metable로 할 수 있는 일이 있을 수도 있지만, 고유한 업밸류가 더 나을 수도 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 21일 14:19 (UTC)]
모듈의 함수 장난()을 참조하십시오.validateSubnet이 악용될 수 있음을 보여주는 데모용 Sandbox/Johnuniq/ip.그 결과는 그 이야기의 밑바닥에 있다.방탄하는 건 걱정 안 해도 돼Johnuniq (토크) 10:55, 2016년 7월 22일 (UTC)
RawIP.newFromIPv6 버그
테스트 케이스에서 Raw에 버그가 발생했습니다.IP.new 발신인IPv6 - 알고 보니IPAddress.new(':::') 유효하게 취급되고 있습니다.(그런데 Scribunto Unit에서 "참이 거짓이라고 단언하지 못했습니다"보다 더 나은 메시지를 받을 수 있도록 주의해 주십시오.)복잡한 문자열 해석을 디버깅하기에는 너무 늦었습니다.기회가 되면 봐주실 수 있나요?- Stradivarius님♪ talk ♪ 2016년 7월 22일 (UTC)
- 예상한 것 같은데, Raw는IP.new 발신인IPv6 에서는, 「수용하는 것에 자유로워지기」전략의 일환으로서 「:」를 받아들입니다.애매한 것은 받아들이지 않고, 콜론 3개가 의미 있는 것이라면 콜론 2개와 같은 의미입니다.
- 입력에 정확히7개의 콜론이 있는 경우, 애매함은 없고, IPv6 인증국에서는 무효라고 하는 문자열을 코드는 받아들입니다.다음은 몇 가지 입력과 결과를 보여 줍니다.
tostring(IPAddress.new(s)).
이들 입력에는 정확히 7개의 콜론이 있습니다.입력 결과 0::2:: 4 : 5 : : : 2 : 0 : 0 : 5 : 0 : 0 : 0 : 0 : 0 : 1 : 2 : 3 : 0 : 0 : : 1 : 2 : 3 : 0 : 0 : 1 : 2 : 4 : 5 : : : : 1 : 2 : 3 : 5 : 5 : : : : : 1 : 3 : 5 : 5 : 5 : 0 : 0 : 0 : 0 : 0 : 0 : 입력의 콜론보다 작은 콜론입니다.입력 결과::1:2:3:4::1:2:3:0:1:2:3:::':'는 유효하지 않은 IP 주소입니다.
- 모듈의 원래 코드:IP block이 IP 주소의 구문 해석된 텍스트에 공백이 포함되어 있지 않은 것을 확인하고 Raw를 확인했습니다.IP.new 발신인IPv6 는, 16 진수의 주위의 공백( 「: 1:2:3」은 IP:1:2:3)을 무시하기 때문에, 너무 자유롭습니다.
- 반면 RawIP.newFrom은IPv4 는, 각 컴퍼넌트가 「^%d+$」와 일치하는 것을 확인합니다.이것은, tonumber가 10 진수의 「-1.5」, 「1e3」, 「0x1」등의 것을 받아들이기 때문입니다.
- 아마도 새로운 시작점IPv6 는, 엄밀한 유효성을 체크해, 상기의 모든 입력을 거부합니다.몇 줄만 더 하면 돼요Johnuniq (토크) 00:28, 2016년 7월 23일 (UTC)
- 설명해주셔서 감사합니다. 정말 말이 되네요.IP 검증에 엄격한지 여부는 다른 모듈이 라이브러리를 무엇에 사용하는지에 따라 다르다고 생각합니다.모듈이 IPAddress.new를 사용하여 문자열이 유효한 IP 주소인지 테스트하는 경우 ":::"와 같은 것을 허용하면 모듈이 문제를 일으킵니다.단, 모듈이 라이브러리를 사용하여 최종 사용자에 의해 수동으로 입력된IP를 해석하는 경우에는 수용하는 내용에 대해 보다 자유로워지는 것이 장점일 수 있습니다.아마 후자보다 전자가 더 많이 일어날 것 같아서 엄격한 검증을 하고 싶지만, 역시 저의 선견지명이 완벽하지 않습니다.또는 파싱 모드를 하나만 선택하는 대신 파싱의 엄격함을 변경할 수 있는 일종의 "퍼지 입력" 옵션을 활성화할 수 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 23일 01:08 (UTC)
- 생각해보고 몇 시간 안에 뭔가 할 거야30시간 동안 기회가 없을 수도 있어요
- Module에서 몇 가지 내용을 추가해야 합니다.IP 블록. 임의의 텍스트에서 IP를 추출하는 기능부터 시작합니다.IPv6 의 경우, IPblock 에는 다음의 코멘트가 있습니다.
- 설명해주셔서 감사합니다. 정말 말이 되네요.IP 검증에 엄격한지 여부는 다른 모듈이 라이브러리를 무엇에 사용하는지에 따라 다르다고 생각합니다.모듈이 IPAddress.new를 사용하여 문자열이 유효한 IP 주소인지 테스트하는 경우 ":::"와 같은 것을 허용하면 모듈이 문제를 일으킵니다.단, 모듈이 라이브러리를 사용하여 최종 사용자에 의해 수동으로 입력된IP를 해석하는 경우에는 수용하는 내용에 대해 보다 자유로워지는 것이 장점일 수 있습니다.아마 후자보다 전자가 더 많이 일어날 것 같아서 엄격한 검증을 하고 싶지만, 역시 저의 선견지명이 완벽하지 않습니다.또는 파싱 모드를 하나만 선택하는 대신 파싱의 엄격함을 변경할 수 있는 일종의 "퍼지 입력" 옵션을 활성화할 수 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 23일 01:08 (UTC)
-- 컨트리뷰터가 「:」로 시작하는 주소를 가지지 않아도, 유효한 IPv6 를 모두 받아들이려고 합니다.또, 콜론을 사용할 가능성이 있는 임의의 Wikitext 를, 들여쓰기용으로 해석할 수도 있습니다.그러기 위해서는, 행의 선두에 있는 주소가 유효한 경우 -- 를 사용해 주세요.그렇지 않은 경우는, 선행 콜론을 모두 삭제하고, 재시도해 주세요.
- 모듈에서도 같은 작업을 수행해야 합니다.아이피?
- 텍스트에서 IP를 추출하기 위한 스켈레톤 함수를 추가할 수 있습니다.이러한 구현은 며칠 안에 완료할 수 있습니다.무엇을 반환해야 하는지에 대한 문제가 있다.IPblock은 텍스트를 2회 해석하여 IPv4와 IPv6의 2개의 목록을 반환합니다.이 모듈은 1개의 목록을 반환할 수 있으며 클라이언트는 getVersion을 사용하여 어떤 목록을 반환할 수 있는지 확인할 수 있습니다.리스트에는, IP 와 서브넷이 혼재하는 경우도 있습니다.이러한 IP 와 서브넷을 구별하는 속성을 가지는 것이 편리할 수 있습니다.Johnuniq (대화) 2016년 7월 23일 01:25 (UTC)
- 설명해주신 함수는 위의 #Plan 섹션에서 설명한IPCollection 객체를 반환해야 할 것 같습니다.또는, IPv4 Collection 개체와 IPv6 Collection 개체를 개별적으로 가질 수도 있습니다.어느 쪽을 선택해도 IP Collection은 임의의 수의 IP 주소와 서브넷을 저장하고 적어도 다음 작업을 수행할 수 있어야 합니다.
- 컬렉션에서 가장 높은 IP 주소와 가장 낮은 IP 주소를 가져옵니다.
- 모든 IP 주소 및 서브넷에 맞는 최소 단일 서브넷 찾기
- 컬렉션의 항목에 정확히 맞는 가능한 최소 IP 주소 및 서브넷 집합을 찾습니다.
- 컬렉션의 모든 IP 주소에 걸쳐 반복
- IPv4 와 IPv6 가 혼재하는 경우는, 이러한 어느 것도 그다지 이치에 맞지 않는 것을 생각하면, 각각 다른 클래스를 만들고 싶다고 생각하고 있습니다.아마도 새로운 내부 Raw에 내장된 기본 논리를 사용하고 있을 것입니다.IP Collection 클래스따라서 클라이언트는 함수를 사용하여 문자열을 두 번 해석하고 두 개의 개별 목록을 반환하는 대신 동일한 문자열을 두 번 해석합니다.
IPv4Collection.newFromString(str)그리고.IPv6Collection.newFromString(str)두 IP 버전이 모두 필요한 경우.또는 클라이언트가 같은 오브젝트 내에서2개의 다른 IP 버전을 사용하려고 하면 IP Collection 클래스가1개만 있어도 에러가 발생할 수 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 23일 08:55 (UTC)]- 모듈에도 도움이 됩니다.중요한 IP 주소는 최소 및 최대 IP 주소를 사용하고, 그 사이에 포함되는 서브넷의 최소 세트를 반환하는 경우가 있습니다.그 반대도 편리할 수 있습니다.서브넷 그룹을 가져와서 다른 서브넷 중 하나와 인접한 서브넷이 있는지 여부 및 중복되는 서브넷이 있는지 여부를 고려하여 최대 및 최소 IP 목록을 반환합니다. Stradivarius님♪ talk ♪ 2016년 7월 23일 (UTC[응답]
- 별로 생각해 본 적은 없지만, 왜?
IPCollection.newFromString(str, version)여기서 version의 디폴트는 「IPv4」이지만, 「IPv6」인 경우도 있습니다.v4와 v6이 모두 포함된 경우 임의 텍스트를 구문 분석하고 오류를 발생시키는 것은 유용하지 않습니다.4개의 글머리 기호 중 첫 번째와 마지막 포인트는 포인트2 또는 3에 맞는 모든 가능한 IP가 아니라 특정 IP를 의미합니다.복잡한 옵션은 클린 클래스와 모순되는 것은 알지만 클라이언트가 원하는 옵션은 목록(컬렉션)을 정렬하고 중복을 제거하는 것입니다.목록에 다수의 서브넷이 포함되어 있는 경우 중복을 삭제하는 것은 다소 까다롭습니다.이는 어떤 영웅적인 인덱싱 방식이 고안되지 않는 한 각 IP를 각 서브넷과 대조하여 확인해야 하기 때문입니다.IP Collection에는 옵션이 아닌 정렬 또는 클리닝(중복 제거)하는 방법이 있습니다.다음 주에는 특히 바쁘기 때문에, 앞으로 며칠 동안, 혹은 포인트 3에 대해서는 더 오래 위의 내용을 구현할 수 있을 것입니다.포인트 3은 어렵습니다.설명한 바와 같이 모듈:IPblock은 모든 서브넷을 개별 IP로 확장한 후 중복된 서브넷을 정렬 및 제거하고 결과를 얻기 위해 이상한 작업을 수행합니다.사용하는 알고리즘의 본질을 확장하여 IP 및 서브넷 목록을 사용할 수 있을 것으로 생각했지만, 현재 모듈의 우아함에 비해 코드는 매우 추악합니다.IP. 모듈에 관한 또 다른 포인트:IPblock: 텍스트를 해석할 때 IP로 의도되지 않았다고 생각되는 항목은 무시되며 CIDR 블록이 비활성화(호스트 비트가0이 아님)된 경우에만 오류가 발생합니다.그러나 IP로 의도되었을 수 있는 항목에 대한 경고 목록이 표시됩니다.예를 들어 "1.2..4"는 경고 목록에 포함되지만 "1 . 3 . 4"는 검색 시 무시됩니다.<number><dot><number><more>IPv4 용입니다.당신의 두 번째 코멘트의 요점은 더 모험적이지만 확실히 달성할 수 있습니다.Johnuniq (토크) 10:02, 2016년 7월 23일 (UTC)
- 별로 생각해 본 적은 없지만, 왜?
- 모듈에도 도움이 됩니다.중요한 IP 주소는 최소 및 최대 IP 주소를 사용하고, 그 사이에 포함되는 서브넷의 최소 세트를 반환하는 경우가 있습니다.그 반대도 편리할 수 있습니다.서브넷 그룹을 가져와서 다른 서브넷 중 하나와 인접한 서브넷이 있는지 여부 및 중복되는 서브넷이 있는지 여부를 고려하여 최대 및 최소 IP 목록을 반환합니다. Stradivarius님♪ talk ♪ 2016년 7월 23일 (UTC[응답]
- 설명해주신 함수는 위의 #Plan 섹션에서 설명한IPCollection 객체를 반환해야 할 것 같습니다.또는, IPv4 Collection 개체와 IPv6 Collection 개체를 개별적으로 가질 수도 있습니다.어느 쪽을 선택해도 IP Collection은 임의의 수의 IP 주소와 서브넷을 저장하고 적어도 다음 작업을 수행할 수 있어야 합니다.
IP 콜렉션
제가 잠을 못 잤다는 걸 알려드리려고 글을 올렸습니다.여기 일이 정신없어서 며칠 동안 그렇게 계속될 거야.난 루아 수업을 이해하려고 노력했어class.new()개념에 익숙하고 Lua 문서를 읽습니다.class:new()(상속: 상속에 도움이 됩니다) 오래 전입니다.어쨌든, 저는 지금 시작했지만 한동안 코드를 게시할 시간이 없을 것입니다.
현재 계획:
- 수집을 원시 밖으로 이동IP와 일치하도록 합니다.
class.new(). - 클래스 IPv4Collection 및 IPv6Collection을 IPCollection에서 파생합니다.
- IP Collection에는 컬렉션이 있지만 컬렉션이 아닙니다.
- IPv4 Collection 및 IPv6 Collection만 내보냅니다.이것들의 내용을 보호할 계획은 없습니다.클라이언트가 컬렉션을 중단하는 것을 막기 위해 코드를 확대하는 것은 의미가 없습니다.
-- 예. 현지의 모드 코드 = 요구하다('모듈:IP') IPv4 컬렉션 = 모드 코드.IPv4 컬렉션 IPv6 수집 = 모드 코드.IPv6 수집 현지의 v4 = IPv4 컬렉션.신규() 현지의 v6 = IPv6 수집.신규() v4:addFromString('모든 텍스트 1.2.3.255 1.2.0.0/16 11.22.33.44 11.140.0.0/12') v4:addFromString('IP 주소로 더 많은 텍스트') --다음은 잘 모르겠습니다. --현재 3개의 리스트(각각 컬렉션)가 있습니다. -- .timeouts = IPAddress 객체 -- .subnet = 서브넷오브젝트 -- .timeouts = 유효에 가깝지만 유효하지 않은 텍스트 문자열 위해서 _, 아이템 에 아이페어(v4.어드레스) 하다 인쇄물(아이템:IP를 취득하다()) -- print = 결과에 대해 뭔가 조치를 취합니다. 끝. 위해서 _, 아이템 에 아이페어(v4.서브넷) 하다 인쇄물(아이템:CIDR을 취득하다()) 끝. --다음은 11.140.0.0/12가 유효한 서브넷이 아니기 때문에 표시됩니다. -- 이것은 임의의 텍스트 입력이 발생했을 경우에 에러를 발생시키는 것보다 나은 것 같습니다. -- 에러가 포함되어 있습니다. 인쇄물('메시지: ' .. v4.생략했다:합류하다(' ')) 반드시 .addresses와 .subnets를 하나의 목록(.items?)으로 대체하여 정렬할 수 있습니다.추가가 필요합니다..typeIPAddress 및 서브넷에 대한 속성 또는:getType()하나의 목록에 있는 항목을 쉽게 식별할 수 있도록 'IPAddress' 또는 'Subnet'을 제공합니다.또한 IPAddress 개체와 서브넷 개체를 비교할 수 있어야 합니다.
다음으로 특정 IPAddress 또는 Subnet이 컬렉션에 중복되는지 여부를 판단하는 방법이 있습니다.그러면 더.Johnuniq (토크) 00:02, 2016년 7월 27일 (UTC)
- 모듈을 업데이트했습니다.IP는 IP/서브넷 목록 하나가 두 개의 개별 목록보다 더 낫다고 확신하기 때문에 다시 반영합니다.기능을 추가했습니다.
check_IPCollection모듈:Sandbox/Johnuniq/ip을 사용하여 새 코드를 실행합니다.결과는 모듈 토크 하단에 있습니다.샌드박스/Johnuniq/ipJohnuniq (대화) 2016년 7월 27일 12:30 (UTC)- 수고하셨습니다.한 개의 리스트가 두 개의 리스트보다 더 낫다는 당신의 말이 맞을 수도 있다고 생각합니다.두 개의 개별 목록이 있으면 모듈의 체크를 수행하기 위해 필요한 코드의 양이 확실히 증가합니다.기밀 IP 주소아마도 우리는 하나의 클래스만 사용할 수 있고 클라이언트가 다른 방법으로는 애매한 메서드에 대한 버전 매개 변수를 전달할 수 있도록 할 수 있습니다.
IPCollection.newFromString(str, version)위에요. 그래서 대신IPv4Collection:getHighestIP(), 우리는 할 수 있었다.IPCollection:getHighestIP(version)Stradivarius님♪ talk ♪ 2016년 7월 31일 (UTC)응답[
- 수고하셨습니다.한 개의 리스트가 두 개의 리스트보다 더 낫다는 당신의 말이 맞을 수도 있다고 생각합니다.두 개의 개별 목록이 있으면 모듈의 체크를 수행하기 위해 필요한 코드의 양이 확실히 증가합니다.기밀 IP 주소아마도 우리는 하나의 클래스만 사용할 수 있고 클라이언트가 다른 방법으로는 애매한 메서드에 대한 버전 매개 변수를 전달할 수 있도록 할 수 있습니다.
모듈: 기밀 IP 주소
모듈에 몇 가지 코드를 덤프한 것을 알 수 있습니다.모듈이 어떻게 동작하는지 알 수 없지만 중요한 IP 주소입니다.IP 또는 IP 범위를 차단하려는 관리자가 대화식으로 사용할 수 있습니까?대체적으로 어떻게요?또는 모듈은 그 상호작용을 위해 일부 JavaScript에서 사용되는 데이터를 제공합니까?
전자의 경우, 내 코드가 많은 작업을 수행합니다.후자의 경우 모듈이 다음과 같은 이유를 알 수 없습니다.IP는 IP의 집합이 IP를 커버하고 있는지 여부를 판단하기 위한 현명한 방법이 필요합니다.어쨌든 모듈을 테스트하고 싶었다.클라이언트의 시점에서 보면 IP입니다.그 때의 생각을 이하에 나타냅니다.
근데 저는...sensitiveList = mw.loadData(modname)그렇지만requireloadData에는 오버헤드가 있지만 이 응용 프로그램에는 이점이 없기 때문에 더 좋습니다.
모듈:IP에는 다음과 같은 일반적인 기능이 필요합니다.
- 문자열을 해석하여 적절한 개체를 반환하거나 문자열이 유효하지 않은 경우 0을 반환하는 함수입니다.문자열은 IPv4 또는 IPv6 주소 또는 IPv4 또는 IPv6 서브넷을 나타낼 수 있습니다.봐
getObject내 코드 덤프 안에 있어 - IPv4 와 IPv6 의 양쪽 모두의 컬렉션을 보관 유지하는 IP 콜렉션.클라이언트는, IPv4/IPv6 주소 또는 서브넷을 추가할 수 있어 오브젝트는 적절한 서브 리스트에 넣을 수 있습니다.또, 클라이언트는 IPv4 와 IPv6 가 혼재하는 문자열을 건네줄 수 있습니다.
- IPv4 Collection 및 IPv6 Collection 클래스가 필요한지 잘 모르겠습니다.대신 클라이언트는 이전 포인트와 같이 범용 IP 콜렉션 형식을 사용할 수 있습니다.
- IPAddress 및 서브넷오브젝트는 체크하는 메서드가 필요합니다.라고 생각하고 있습니다.
obj:isSubnet()그것만 있으면 될 거야.
Johnuniq (토크) 00:33, 2016년 7월 29일 (UTC)
- 모듈의 범위:기밀 IP 주소는 기밀 IP 및 IP 범위 및 기밀 IP 주소의 목록으로 기능합니다.내용을 템플릿에 "전송"하려면 다른 모듈이 필요합니다.기밀 IP 주소와 MediaWiki:group-sysop.js.나는 루아족이 아니기 때문에 그것밖에 모른다.Jo-Jo Eumerus (토크, 투고) 2016년 7월 29일 (UTC)
- 감사합니다, 저는 그 js 페이지에 대해 몰랐고, 그것이 분명히 타겟입니다.미스터 S는 다른 곳에서 바쁜 것 같습니다. 그가 괜찮고 빨리 돌아왔으면 좋겠고, 각 모듈이 무엇을 해야 하는지 명확하게 해 줄 것입니다.Johnuniq (대화) 2016년 7월 29일 11:45 (UTC)
- 네, 괜찮아요, 하지만 지난 며칠 동안 좀 바빴어요.Jo-Jo Eumerus가 옳습니다. 이 계획은 모듈의 데이터를 사용하는 것입니다.MediaWiki의 중요한 IP 주소:group-sysop.js.이 기능은 Special에서 활성화됩니다.관리자가 차단하려는 IP 또는 범위가 중요한 경우 알림을 차단하고 팝업합니다.이 모듈을 사용하여 이 스크립트와 템플릿의 데이터를 저장합니다.기밀 IP 주소(및 WP 테이블의 경우:SIP)를 사용하여 데이터를 서로 다른 포크로 유지할 필요가 없습니다.더 복잡한 기능을 추가하려고 생각한 이유는 x.x.x.y.y.y 형식으로 범위를 표시할 수 있도록 하기 위해서입니다.여기서 x.x.x 와 y.y.y는 하나의 CIDR 블록에 깔끔하게 들어가지 않을 수 있습니다.(모듈의 캐나다 정부 항목 참조:중요한 IP 주소/목록이 도움이 될 수 있는 예를 나타냅니다).그러나 이 기능은 모듈이 작동하기 위해 필요한 것은 아닙니다.그냥 '갖기 좋은' 기능입니다.또한 데이터를 서로 겹치지 않고 오름차순으로 분할할 수 있기 때문에 부정행위를 할 수 있으며 x.x.x.y.y.y.y.y.y.y.y 범위를 구축하기 위해 한 블록에서 가장 높은 IP가 다음 블록에서 가장 낮은 IP인지 여부를 확인할 수 있습니다.- Stradivarius님♪ talk ♪ 2016년 7월 29일 (UTC)
- 감사합니다, 저는 그 js 페이지에 대해 몰랐고, 그것이 분명히 타겟입니다.미스터 S는 다른 곳에서 바쁜 것 같습니다. 그가 괜찮고 빨리 돌아왔으면 좋겠고, 각 모듈이 무엇을 해야 하는지 명확하게 해 줄 것입니다.Johnuniq (대화) 2016년 7월 29일 11:45 (UTC)
IP 범위
모듈에 범위 클래스를 추가했습니다.모듈에 대한 IP 및 데모:기밀 IP 주소(범위는 토크의 선두에 표시됩니다).까다로운 코드이지만 컬렉션에 해당하는 최소 IP 범위가 항상 표시될 것입니다.잠시 쉬면서 더 필요한 게 있는지 지켜봐야겠어요.상기의 몇 가지 포인트는 실시해야 할 것 같습니다만, 코드를 사용할 수 있을지 잘 모르기 때문에 큰 메리트는 없을지도 모릅니다.Johnuniq (토크) 07:52, 2016년 7월 31일 (UTC)
- 그거 꽤 멋지다 - 고마워!Template 표를 만들 때 반드시 사용합니다.기밀 IP 주소Stradivarius님♪ talk ♪ 2016년 7월 31일 13:18 (UTC)