android - que - mi direccion ipv4
¿Cómo obtengo IP_ADDRESS en formato IPV4? (3)
Después de probar muchos trucos ... finalmente puedo obtener la dirección IP en formato IPV4 ... Aquí está mi código ...
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
System.out.println("ip1--:" + inetAddress);
System.out.println("ip2--:" + inetAddress.getHostAddress());
// for getting IPV4 format
if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4 = inetAddress.getHostAddress())) {
String ip = inetAddress.getHostAddress().toString();
System.out.println("ip---::" + ip);
EditText tv = (EditText) findViewById(R.id.ipadd);
tv.setText(ip);
// return inetAddress.getHostAddress().toString();
return ip;
}
}
}
} catch (Exception ex) {
Log.e("IP Address", ex.toString());
}
return null;
}
Añadido si la condición se muestra a continuación
/**This shows IPV4 format IP address*/
if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4 = inetAddress.getHostAddress())){}
en lugar de esto
/**This shows IPV6 format IP address*/
if (!inetAddress.isLoopbackAddress()){}
Muchas gracias .. Rahul
Una alternativa para verificar si la dirección es una dirección de la versión 4 es:
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address)
Estoy intentando obtener la dirección IP de un dispositivo, es decir, usando una conexión WIFI o 3G. Estoy recibiendo la dirección IP en formato IPV6 que no es comprensible. Quiero una dirección IP en formato IPV4. He hecho google pero no encontré ninguna solución adecuada.
Aquí está el código que estoy usando para obtener la dirección IP de un dispositivo
public String getLocalIpAddress() {
try {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
{
InetAddress inetAddress = enumIpAddr.nextElement();
System.out.println("ip1--:" + inetAddress);
System.out.println("ip2--:" + inetAddress.getHostAddress());
if (!inetAddress.isLoopbackAddress()) {
String ip = inetAddress.getHostAddress().toString();
System.out.println("ip---::" + ip);
EditText tv = (EditText) findViewById(R.id.ipadd);
tv.setText(ip);
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception ex) {
Log.e("IP Address", ex.toString());
}
return null;
}
Estoy recibiendo esta salida
ip1--:/fe80::5054:ff:fe12:3456%eth0%2
ip2--:fe80::5054:ff:fe12:3456%eth0
Debería mostrarse así:
192.168.1.1
Por favor, ayúdame..
No puede asumir que cualquier dispositivo tiene una sola dirección de red. Tampoco puede asumir que tendrá ningún IPv4; puede ser solo IPv6, por lo que su aplicación tendrá que ser capaz de manejar las pantallas de direcciones IPv4 e IPv6.
Por lo general, un teléfono Android tiene al menos dos interfaces a las que se asignan direcciones IP utilizables, rmnet0 para los datos 3G, que para IPv4 a menudo tiene NAT de operador y, por lo tanto, no puede aceptar conexiones de socket entrantes y también puede tener una dirección IPv6; y wlan0 para el wifi, que tendrá cualquier dirección IPv4 y / o IPv6 que pueda negociar con la red a la que se conecta.
Algunas versiones de Android eliminarán intencionalmente el enlace rmnet0 (normalmente más caro) cuando se conecte a wifi, en un intento por reducir el uso de datos 3G. Este comportamiento es un problema cuando el wifi se ha conectado a algo que es un portal cautivo que requiere un inicio de sesión manual.
Parece que hay una clase Inet4Address separada en la API de Java para direcciones IPv4.