2009-08-17 10 views
0

J'ai environ 20000 adresses IP. et je cherche à trouver les plages de bloc réseau pour ces adresses IP. Le but est de fournir des informations pour avoir un trou dans le pare-feu afin que ces adresses puissent être autorisées. Je peux regarder dans le format de a.b.c.d/x bits. Il pourrait y avoir plusieurs plages. Mise à jour: J'ai déjà des adresses IP dans mes fichiers journaux apache, plutôt que d'en créer de nouvelles.Comment trouver les plages d'adresses IP à partir de la liste des adresses IP

+0

Les adresses IP "n'appartiennent pas" aux blocs. Pourriez-vous donner un exemple de ce que vous essayez de faire? – skaffman

+0

Voir la mise à jour: J'essaie de comprendre les plages des adresses IP existantes. – aartist

+0

Oui, nous nous en rendons compte, mais cela ne change rien au fait que vous ne pouvez pas déterminer un bloc réseau à partir d'une adresse IP. – skaffman

Répondre

5

Vous ne pouvez pas le déterminer à partir des adresses. Vous devez connaître les masques de sous-réseau.

0

Je crois que vous parlez de CIDR. 20000 < 2^15. Vous avez donc besoin d'un bloc A.B.C.D/15 gratuit, mais le bloc AFAIK/15 n'est pas commun, alors que/16 est accepté. Vous avez donc besoin de A.B.C.D/16.

+0

J'essaie de trouver des plages d'adresses IP existantes à partir de mes fichiers journaux plutôt que d'en demander de nouvelles. – aartist

+0

Ensuite, vous pouvez trier les adresses IP et le plus grand et le plus petit vous donnera un indice pour le masque de sous-réseau CIDR. – dimba

+0

J'ai des adresses IP existantes et je peux facilement avoir plus d'un sous-réseau. – aartist

0

Voulez-vous les trouver par programme? Si votre réponse est oui, je vais donner une solution pour cela en Java.

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; 
    } 
} 

Cela ne fonctionnera pas sauf si vous modifiez la variable originalIP à une adresse IP réelle.

+0

Salut, Pouvez-vous expliquer l'algorithme? Je suis peut-être à la recherche d'une solution récursive. – aartist

+0

Désolé, il semble que j'ai mal compris votre question. Vous voulez, étant donné un ensemble d'adresses IP trouver les plages qui les contient tous? – Guilherme

Questions connexes