The IPAddress Java library supporta sia IPv4 che IPv6 in modo polimorfico tra cui sottoreti. Il javadoc è disponibile al link. Disclaimer: io sono il project manager.
Tutti i casi d'uso elencati sono supportati sia per IPv4 che per IPv6 in modo trasparente. In altre parole, si differenzia dalla maggior parte delle altre utility nel senso che il codice seguente funziona identicamente con IPv4 o IPv6 come stringhe di input.
Verificare se un indirizzo valido
String str = "::1";
IPAddressString addrString = new IPAddressString(str);
try {
IPAddress addr = addrString.toAddress();
...
} catch(IPAddressStringException e) {
//e.getMessage provides validation issue
}
ritorno se l'indirizzo è contenuto all'interno di una sottorete
String str = "1::1";
String subnetStr = "1::/64";
IPAddressString addrString = new IPAddressString(str);
IPAddressString subnetString = new IPAddressString(subnetStr);
try {
IPAddress addr = addrString.toAddress();
IPAddress subnet = subnetString.toAddress();
boolean isContained = subnet.contains(addr); //true in this case
...
} catch(IPAddressStringException e) {
//e.getMessage provides validation issue
}
ritorno l'indirizzo di broadcast per una data sottorete
String subnet = "127.0.0.0/28";
IPAddressString subnetString = new IPAddressString(subnet);
try {
IPAddress subnet = subnetString.toAddress();
IPAddress broadcastAddr = subnet.getHighest();
...
} catch(IPAddressStringException e) {
//e.getMessage provides validation issue
}
restituire un elenco di indirizzi per una sottorete nell'ordine
String subnet = "127.0.0.0/28";
IPAddressString subnetString = new IPAddressString(subnet);
try {
IPAddress subnet = subnetString.toAddress();
for(IPAddress addr : subnet) {
...
}
} catch(IPAddressStringException e) {
//e.getMessage provides validation issue
}
Ordinamento di un elenco di indirizzi
List<IPAddressString> addrs;
Collections.sort(addrs); //IPAddressString implements Comparable
Preparati di reti subnetted e l'elenco degli indirizzi (risposta a AhmedRana):
IPAddress subnet = new IPAddressString("192.168.0.0/28").getAddress();
IPAddress newSubnets = subnet.setPrefixLength(subnet.getPrefixLength() + 1, false);
System.out.println(newSubnets); //192.168.0.0-8/29
HashSet<IPAddress> subnetSet = new HashSet<IPAddress>();
ArrayList<IPAddress> addrList = new ArrayList<IPAddress>();
for(IPAddress addr : newSubnets.getIterable()) {
subnetSet.add(addr.toPrefixBlock());
addrList.add(addr);
}
System.out.println(subnetSet);//[192.168.0.0/29, 192.168.0.8/29]
System.out.println(addrList);
//[192.168.0.0/29, 192.168.0.1/29, 192.168.0.2/29,
//192.168.0.3/29, 192.168.0.4/29, 192.168.0.5/29,
//192.168.0.6/29, 192.168.0.7/29, 192.168.0.8/29,
//192.168.0.9/29, 192.168.0.10/29, 192.168.0.11/29,
//192.168.0.12/29, 192.168.0.13/29, 192.168.0.14/29,
//192.168.0.15/29]
Grazie per pubblicare la tua risposta! Si prega di leggere attentamente le [FAQ sulla promozione di sé] (http://stackoverflow.com/faq#promotion) attentamente. Si noti inoltre che * è * richiesto * di pubblicare un disclaimer ogni volta che si collega al proprio sito/prodotto. –
@AndrewBarber Grazie. Non ero a conoscenza di questo. Stavo solo cercando di aiutare gli altri che potrebbero avere lo stesso problema che avevo. Ad ogni modo, farò un disclaimer. –