Quale libreria è possibile utilizzare per verificare se un indirizzo IP si trova in una determinata subnet? Sono riuscito a trovare librerie come Apnet Commons SubnetUtils (SubnetUtils.SubnetInfo.isInRange) ma molti non supportano ancora IPv6.Libreria Java per verificare se l'indirizzo IPv4 o IPv6 si trova in una subnet specifica
risposta
edazdarevic's CIDRUtils supporta sia IPv4 che IPv6. L'esempio non menziona booleano isInRange (String ipAddress), ma è implementato!
Un'altra opzione è java-ipv6, ma non supporta IPv4 e requires JDK7.
The IPAddress Java library supporta sia IPv4 che IPv6 in modo polimorfico e supporta le sottoreti, inclusi i metodi che controllano il contenimento di un indirizzo o sottorete in una sottorete. Il javadoc è disponibile al link.
Questo è sample code che risolve il problema, che funziona in modo identico con IPv4 o IPv6.
Utilizzare Spring's IpAddressMatcher. A differenza di Apache Commons Net, supporta sia ipv4 che ipv6.
private void checkIpMatch() {
matches("192.168.2.1", "192.168.2.1"); // true
matches("192.168.2.1", "192.168.2.0/32"); // false
matches("192.168.2.5", "192.168.2.0/24"); // true
matches("92.168.2.1", "fe80:0:0:0:0:0:c0a8:1/120"); // false
matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/120"); // true
matches("fe80:0:0:0:0:0:c0a8:11", "fe80:0:0:0:0:0:c0a8:1/128"); // false
matches("fe80:0:0:0:0:0:c0a8:11", "192.168.2.0/32"); // false
}
private boolean matches(String ip, String subnet) {
IpAddressMatcher ipAddressMatcher = new IpAddressMatcher(subnet);
return ipAddressMatcher.matches(ip);
}
Suggerimento: Anche se non si sta usando la primavera e hai bisogno di una soluzione rapida leggera, è ancora possibile utilizzare questa classe con molto piccole modifiche (rimuovendo l'interfaccia) al source code. (Anche se questo approccio non è raccomandato per i progetti seri e/o se si sta violando la loro license!)
commons-ip-math fornisce il supporto per IPv4 e indirizzi IPv6. Ecco come è possibile verificare se un indirizzo IP è in una data sottorete:
Ipv4Range.parse("192.168.0.0/24").contains(Ipv4.parse("10.0.0.1"))
// false
Ipv6Range.parse("2001:db8::/32").contains(Ipv6.parse("2001:db8::4"))
// true
(dichiarazione di non responsabilità, io sono uno dei manutentori di commons-ip-matematica)
- 1. Come verificare se qualcuno è connesso via IPv6/IPv4
- 2. Libcurl: forza ipv4 o ipv6
- 3. Calcoli e convalida della rete IPv4/IPv6 per Java?
- 4. Forza richieste di utilizzo di IPv4/IPv6
- 5. Corrispondenza dell'indirizzo IPv6 a una subnet CIDR
- 6. Come determinare se una stringa è un indirizzo IPv4 o IPv6 valido in C#?
- 7. Listener socket per IPv6 e IPv4
- 8. ValueError: '10 .0.0.0/24 'non sembra essere una rete IPv4 o IPv6
- 9. Convalida IPv4, IPv6 e nome host
- 10. Come sostenere sia IPv4 che IPv6 e su Java
- 11. Espressione regolare Java per accettare un nome host valido, IPv4 o IPv6
- 12. jmdns registra sull'interfaccia IPv4, ma trasmette IPv6
- 13. Verificare se un elemento si trova all'interno di una sequenza
- 14. Modo efficiente per archiviare gli indirizzi IPv4/IPv6
- 15. Come posso convertire l'indirizzo IPV6 in indirizzo IPV4?
- 16. Funzione PHP per convalidare IPv4 e IPv6 usando regex
- 17. Come convertire un indirizzo da IPv4 a IPv6
- 18. Come verificare se una stringa si trova in un determinato intervallo. (Java)
- 19. Perché request.getRemoteAddr() restituisce ipv4 o ipv6 in base al contesto (query post o query ajax)
- 20. Verificare se un file o una directory in Java
- 21. Per verificare se la stringa contiene una parola specifica
- 22. Accettare insieme IPv4 e IPv6 in boost :: asio
- 23. Confronto del socket IPV4 (sockaddr_in) con IPV6 Socket (sockaddr_in6)
- 24. Indicare se una stringa di testo è un indirizzo IPv6 o un indirizzo IPv4 utilizzando l'API C socket standard
- 25. In Java, come posso verificare se una raccolta contiene un'istanza di una classe specifica?
- 26. Come verificare se una stringa si trova in una serie di stringhe in C?
- 27. Rails 3 convalidare il formato IPv4 e IPv6
- 28. Memorizzare l'indirizzo IP nel database MySQL (IPv4 AND IPv6)
- 29. come verificare se un host si trova nel tuo server_host_01
- 30. Verificare se una stringa si trova in una ArrayList di stringhe
Commons richiesta di funzionalità rete per votare per: https://issues.apache.org/jira/browse/NET-405 – Vadzim