Necesito determinar si la dirección IP dada proviene de alguna red especial, debo autenticarme automáticamente.¿Alguien conoce un componente Java para verificar si la dirección IP proviene de una red/máscara de red en particular?
Respuesta
Jakarta Commons Net tiene org.apache.commons.net.util.SubnetUtils
que parece satisfacer sus necesidades. Parece que se hace algo como esto:
SubnetInfo subnet = (new SubnetUtils("10.10.10.0", "255.255.255.128")).getInfo();
boolean test = subnet.isInRange("10.10.10.10");
Tenga en cuenta, como señala carson, que Jakarta Commons Net tiene a bug que le impide dar la respuesta correcta en algunos casos. Carson sugiere usar la versión SVN para evitar este error.
También puede intentar
boolean inSubnet = (ip & netmask) == (subnet & netmask);
o más corto
boolean inSubnet = (ip^subnet) & netmask == 0;
¿Son las IP y las máscaras de red o longs? – simgineer
Las direcciones de 32 bits, IPv4, son entradas. Sospecho que IPv6 son valores de 64 bits, pero no he usado el dobladillo –
Uso de Primavera de IpAddressMatcher. A diferencia de Apache Commons Net, admite tanto ipv4 como ipv6.
import org.springframework.security.web.util.matcher.IpAddressMatcher;
...
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);
}
Fuente: here
Para comprobar un CI en una subred, que utiliza el método de EstaEnRango en clase SubnetUtils. Pero este método tiene un error que indica que si su subred es X, cada dirección IP menor que X, isInRange devuelve verdadero. Por ejemplo, si su subred fue 10.10.30.0/24 y desea verificar 10.10.20.5, este método devuelve verdadero. Para lidiar con este error usé el siguiente código.
public static void main(String[] args){
String list = "10.10.20.0/24";
String IP1 = "10.10.20.5";
String IP2 = "10.10.30.5";
SubnetUtils subnet = new SubnetUtils(list);
SubnetUtils.SubnetInfo subnetInfo = subnet.getInfo();
if(MyisInRange(subnetInfo , IP1) == true)
System.out.println("True");
else
System.out.println("False");
if(MyisInRange(subnetInfo , IP2) == true)
System.out.println("True");
else
System.out.println("False");
}
private boolean MyisInRange(SubnetUtils.SubnetInfo info, String Addr)
{
int address = info.asInteger(Addr);
int low = info.asInteger(info.getLowAddress());
int high = info.asInteger(info.getHighAddress());
return low <= address && address <= high;
}
- 1. Cómo verificar si una dirección IP está dentro de una subred particular
- 2. ¿Cómo determinar si la dirección IP entrante proviene de un operador de telefonía móvil?
- 3. ¿Cómo puedo verificar si una IP está viva en Java?
- 4. rastrear una dirección IP y un puerto en particular
- 5. Componente XMPP externo: ¿Alguien conoce un Tutorial o un Ejemplo de código abierto, por favor?
- 6. Obtener la dirección IP 'externa' en Java
- 7. C# - Determinar si un rango de direcciones IP contiene una dirección particular
- 8. Necesito realizar una búsqueda DNS inversa de una dirección IP particular en java
- 9. ¿Cómo saber si una solicitud proviene de un proxy?
- 10. Cómo determinar si una dirección IP pertenece a un país
- 11. ¿Alguien puede suplantar una dirección IP a cualquier número?
- 12. java- utilizando un filtro para verificar la dirección remota
- 13. ¿Alguien conoce un buen foro de mapinfo?
- 14. Verificando si una variable POST [] es una dirección IP?
- 15. Cámara IP, ¿cómo detectarlo en la red?
- 16. ¿Cómo puedo calcular la transmisión IP desde una dirección IP y una máscara de red en Perl?
- 17. Obtener una dirección MAC de máquinas en la red local desde su IP en C#
- 18. RegEx para una dirección IP
- 19. Geocodificar una dirección IP?
- 20. ¿Detecta la dirección IP wifi en Android?
- 21. ¿Cómo compararías la dirección IP?
- 22. Cómo verificar si IP es un proxy público
- 23. Calcular si una dirección IP se encuentra en un rango especificado en Java
- 24. ¿Encontrar una dirección IP pública en Python?
- 25. determina programáticamente si la dirección IP se asigna mediante dhcp o se establece manualmente en java
- 26. ¿Cómo obtengo la dirección IP de la red local de una computadora mediante programación? (C#)
- 27. Obtenga la dirección IP de la máquina
- 28. TcpListener: Escuche en cada dirección, incluida la dirección IP GPRS
- 29. ¿Altere la expresión regular para permitir la dirección IP al verificar la URL?
- 30. Deshabilitar el administrador de red para una interfaz en particular
Tenga cuidado al usar esto. Hay un error que evitará que funcione correctamente. Es posible que desee sacarlo de SVN. http://mail-archives.apache.org/mod_mbox/commons-issues/200902.mbox/%[email protected]%3E – carson
@carson: Gracias por la advertencia. Edité mi respuesta para incluir esta información. – Eddie