2008-10-20 3 views
13

Je suis à la recherche d'une bibliothèque Java orientée vers les mathématiques réseau et déjà testée. Rien de particulièrement sophistiqué, juste quelque chose pour contenir des ips et des sous-réseaux, et faire des choses comme imprimer un masque de sous-réseau ou calculer si une adresse IP est dans un sous-réseau donné.Une bonne bibliothèque Java pour les réseaux mathématiques

Dois-je utiliser la mienne, ou existe-t-il déjà une bibliothèque robuste pour cela?

Répondre

4

org.apache.lenya.ac.IPRange semble avoir ces caractéristiques.

Le projet Apache Lenya est un système de gestion de contenu open-source. Il utilise la licence Apache, vous pourrez donc réutiliser uniquement le code dont vous avez besoin. (Mais comme toujours, lisez le license vous-même, ne faites pas confiance aux conseils juridiques d'un mec sur internet! :-)

+0

org.apache.lenya.ac.IPRange peut certainement être modifié pour répondre à mes besoins, merci pour la réponse. Cela dit, j'espérais trouver quelque chose de plus général, comme un Java équivalent à IP :: NetAddr de Perl. – perilandmishap

0

Le open-source IPAddress Java library peut effectuer des manipulations d'adresse IP telles que la conversion de/vers ipv4/ipv6 et la vérification de sous-réseau. Disclaimer: Je suis le chef de projet.

Il gère diverses opérations mathématiques de réseau, tels que le masquage, au niveau du bit ou, réglage des longueurs de préfixes, l'adresse du commutateur de bloc de préfixe, itérer à travers un sous-réseau, la vérification de confinement, en remplacement de segments d'adresse, les adresses de recul, calculer l'intersection de sous-réseau, en soustrayant un sous-réseau d'un autre et d'autres.

Voici quelques exemples de code pour tester si une adresse ipv6 est dans un sous-réseau donné:

String ipv6 = "2001:db8:57AB:0000:0000:0000:0000:0001"; 
    String ipv6subnet = "2001:db8::/32"; 
    String ipv4 = "1.2.3.4"; 
    try { 
     IPAddressString ipv6addrstr = new IPAddressString(ipv6); 
     IPAddressString ipv6addrsubnetstr = new IPAddressString(ipv6subnet); 
     IPAddressString ipv4addrstr = new IPAddressString(ipv4); 

     IPAddress ipv6addr = ipv6addrstr.toAddress(); 
     IPAddress ipv6addrsubnet = ipv6addrsubnetstr.toAddress(); 
     IPAddress ipv4mappedaddr = ipv4addrstr.toAddress().toIPv6(); 

     System.out.println(ipv6addrsubnet + " contains " + ipv6addr + ": " + ipv6addrsubnet.contains(ipv6addr)); // 
     System.out.println(ipv6addrsubnet + " contains " + ipv4mappedaddr + ": " + ipv6addrsubnet.contains(ipv4mappedaddr)); // 

    } catch(AddressStringException e) { 
     //e.getMessage has validation error 
    } 

sortie:

2001:db8::/32 contains 2001:db8:57ab::1 is true 
2001:db8::/32 contains ::ffff:102:304 is false 
Questions connexes