2009-08-17 9 views
0

약 20000 개의 IP 주소가 있습니다. 이 IP 주소에 대한 네트워크 블록 범위를 찾으려고합니다. 방화벽의 구멍을 막을 수있는 정보를 제공하여 이러한 주소를 허용 할 수 있습니다. 나는 a.b.c.d/x 비트 형식을 볼 수 있습니다. 여러 범위가있을 수 있습니다.IP 주소 목록에서 IP 주소 범위를 찾는 방법

업데이트 : 새 IP 주소를 만들지 않고 이미 아파치 로그 파일에 IP 주소가 있습니다.

+0

IP 주소는 블록에 속하지 않습니다. 당신이하려는 일의 모범을 보여줄 수 있습니까? – skaffman

+0

업데이트보기 : 기존 IP 주소의 범위를 파악하려고합니다. – aartist

+0

예, IP 주소에서 네트워크 블록을 확인할 수 없다는 사실은 변함이 없습니다. – skaffman

답변

5

주소로 확인할 수 없습니다. 서브넷 마스크를 알아야합니다.

0

나는 당신이 CIDR에 대해 이야기하고 있다고 생각합니다. 20000 < 2^15. 따라서 무료 A.B.C.D/15 블록이 필요하지만 AFAIK/15 블록은 일반적이지 않으며/16은 허용됩니다. 그래서 A.B.C.D/16이 필요합니다.

+0

새로운 IP 주소를 요청하는 대신 로그 파일에서 기존 IP 주소의 범위를 파악하려고합니다. – aartist

+0

그러면 IP 주소를 정렬 할 수 있습니다. 가장 작은 IP 주소와 가장 작은 IP 주소를 모두 정렬하면 CIDR 서브넷 마스크에 대한 단서를 얻을 수 있습니다. – dimba

+0

기존 IP 주소가 있고 둘 이상의 서브넷을 쉽게 가질 수 있습니다. – aartist

0

프로그래밍 방식으로 찾고 싶습니까? 대답이 '예'라면 Java 용 솔루션을 제공 할 것입니다. 당신이 진짜 IP에 originalIP 변수를 변경하지 않는 한

public static void main(String[] args) { 

    String originalIP = "a.b.c.d/x"; 
    String[] ipParts = originalIP.split("[\\.\\/]"); 

    boolean ipWithinBounds = true; 

    for (int i = 0; i < ipParts.length; i++) { 
     ipWithinBounds &= withinBounds(Integer.parseInt(ipParts[0]), 
             lowerBound, upperBound); 
    } 
} 

public static boolean withinBounds(int check, int lowerBound, int upperBound) { 
    if(check >= lowerBound && check <= upperBound) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

이 작동하지 않습니다.

+0

안녕하세요, 알고리즘을 설명해 주실 수 있습니까? 재귀적인 해결책을 찾고있을 수도 있습니다. – aartist

+0

죄송합니다. 귀하의 질문에 대한 오해를 한 것으로 보입니다. 원하는 IP 집합을 모두 포함하는 범위를 찾으시겠습니까? – Guilherme