ver una servidor saber pudo nombre estar encontrar dirección direccion conectado como android ip-address

una - no se pudo encontrar la dirección ip del servidor android



¿Cómo obtener la dirección IP del dispositivo desde el código? (18)

¿Es posible obtener la dirección IP del dispositivo usando algún código?


Aunque hay una respuesta correcta, comparto mi respuesta aquí y espero que de esta manera sea más conveniente.

WifiManager wifiMan = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInf = wifiMan.getConnectionInfo(); int ipAddress = wifiInf.getIpAddress(); String ip = String.format("%d.%d.%d.%d", (ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));


Basado en lo que he probado esta es mi propuesta.

import java.net.*; import java.util.*; public class hostUtil { public static String HOST_NAME = null; public static String HOST_IPADDRESS = null; public static String getThisHostName () { if (HOST_NAME == null) obtainHostInfo (); return HOST_NAME; } public static String getThisIpAddress () { if (HOST_IPADDRESS == null) obtainHostInfo (); return HOST_IPADDRESS; } protected static void obtainHostInfo () { HOST_IPADDRESS = "127.0.0.1"; HOST_NAME = "localhost"; try { InetAddress primera = InetAddress.getLocalHost(); String hostname = InetAddress.getLocalHost().getHostName (); if (!primera.isLoopbackAddress () && !hostname.equalsIgnoreCase ("localhost") && primera.getHostAddress ().indexOf ('':'') == -1) { // Got it without delay!! HOST_IPADDRESS = primera.getHostAddress (); HOST_NAME = hostname; //System.out.println ("First try! " + HOST_NAME + " IP " + HOST_IPADDRESS); return; } for (Enumeration<NetworkInterface> netArr = NetworkInterface.getNetworkInterfaces(); netArr.hasMoreElements();) { NetworkInterface netInte = netArr.nextElement (); for (Enumeration<InetAddress> addArr = netInte.getInetAddresses (); addArr.hasMoreElements ();) { InetAddress laAdd = addArr.nextElement (); String ipstring = laAdd.getHostAddress (); String hostName = laAdd.getHostName (); if (laAdd.isLoopbackAddress()) continue; if (hostName.equalsIgnoreCase ("localhost")) continue; if (ipstring.indexOf ('':'') >= 0) continue; HOST_IPADDRESS = ipstring; HOST_NAME = hostName; break; } } } catch (Exception ex) {} } }


El método getDeviceIpAddress devuelve la dirección IP del dispositivo y prefiere la dirección de la interfaz wifi si está conectado.

@NonNull private String getDeviceIpAddress() { String actualConnectedToNetwork = null; ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if (connManager != null) { NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { actualConnectedToNetwork = getWifiIp(); } } if (TextUtils.isEmpty(actualConnectedToNetwork)) { actualConnectedToNetwork = getNetworkInterfaceIpAddress(); } if (TextUtils.isEmpty(actualConnectedToNetwork)) { actualConnectedToNetwork = "127.0.0.1"; } return actualConnectedToNetwork; } @Nullable private String getWifiIp() { final WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (mWifiManager != null && mWifiManager.isWifiEnabled()) { int ip = mWifiManager.getConnectionInfo().getIpAddress(); return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "." + ((ip >> 24) & 0xFF); } return null; } @Nullable public String getNetworkInterfaceIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface networkInterface = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = networkInterface.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { String host = inetAddress.getHostAddress(); if (!TextUtils.isEmpty(host)) { return host; } } } } } catch (Exception ex) { Log.e("IP Address", "getLocalIpAddress", ex); } return null; }


El siguiente código puede ayudarte .. No olvides agregar permisos ...

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(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress(); } } } } catch (Exception ex) { Log.e("IP Address", ex.toString()); } return null; }

Agregue el siguiente permiso en el archivo de manifiesto.

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

feliz codificacion !!


Esta es una revisión de esta respuesta que elimina la información irrelevante, agrega comentarios útiles, nombra las variables con mayor claridad y mejora la lógica.

No olvides incluir los siguientes permisos:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

InternetHelper.java:

public class InternetHelper { /** * Get IP address from first non-localhost interface * * @param useIPv4 true=return ipv4, false=return ipv6 * @return address or empty string */ public static String getIPAddress(boolean useIPv4) { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface interface_ : interfaces) { for (InetAddress inetAddress : Collections.list(interface_.getInetAddresses())) { /* a loopback address would be something like 127.0.0.1 (the device itself). we want to return the first non-loopback address. */ if (!inetAddress.isLoopbackAddress()) { String ipAddr = inetAddress.getHostAddress(); boolean isIPv4 = ipAddr.indexOf('':'') < 0; if (isIPv4 && !useIPv4) { continue; } if (useIPv4 && !isIPv4) { int delim = ipAddr.indexOf(''%''); // drop ip6 zone suffix ipAddr = delim < 0 ? ipAddr.toUpperCase() : ipAddr.substring(0, delim).toUpperCase(); } return ipAddr; } } } } catch (Exception ignored) { } // if we can''t connect, just return empty string return ""; } /** * Get IPv4 address from first non-localhost interface * * @return address or empty string */ public static String getIPAddress() { return getIPAddress(true); } }


Esto funcionó para mí:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());



No hago Android, pero abordaría esto de una manera totalmente diferente.

Envíe una consulta a Google, algo como: https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=my%20ip

Y refiérase al campo HTML donde se publica la respuesta. También puede consultar directamente a la fuente.

A Google le gustará estar allí por más tiempo que tu aplicación.

Solo recuerda, puede ser que tu usuario no tenga internet en este momento, ¡qué te gustaría que sucediera!

Buena suerte


Por favor, compruebe este código ... Uso de este código. obtendremos ip desde internet móvil ...

for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } }


Puedes hacerlo

String stringUrl = "https://ipinfo.io/ip"; //String stringUrl = "http://whatismyip.akamai.com/"; // Instantiate the RequestQueue. RequestQueue queue = Volley.newRequestQueue(MainActivity.instance); //String url ="http://www.google.com"; // Request a string response from the provided URL. StringRequest stringRequest = new StringRequest(Request.Method.GET, stringUrl, new Response.Listener<String>() { @Override public void onResponse(String response) { // Display the first 500 characters of the response string. Log.e(MGLogTag, "GET IP : " + response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { IP = "That didn''t work!"; } }); // Add the request to the RequestQueue. queue.add(stringRequest);


Recientemente, getLocalIpAddress() aún devuelve una dirección IP a pesar de estar desconectado de la red (sin indicador de servicio). Significa que la dirección IP que se muestra en Configuración> Acerca del teléfono> Estado fue diferente de lo que pensaba la aplicación.

He implementado una solución agregando este código antes:

ConnectivityManager cm = getConnectivityManager(); NetworkInfo net = cm.getActiveNetworkInfo(); if ((null == net) || !net.isConnectedOrConnecting()) { return null; }

¿Eso suena a alguien?


Si tienes una concha; ifconfig eth0 funcionó también para dispositivos x86


Simplemente usa Volley para obtener la ip de this sitio

RequestQueue queue = Volley.newRequestQueue(this); String urlip = "http://checkip.amazonaws.com/"; StringRequest stringRequest = new StringRequest(Request.Method.GET, urlip, new Response.Listener<String>() { @Override public void onResponse(String response) { txtIP.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { txtIP.setText("didnt work"); } }); queue.add(stringRequest);


Utilicé el siguiente código: la razón por la que usé el código hash fue porque estaba agregando algunos valores de basura a la dirección IP cuando usaba getHostAddress . Pero hashCode funcionó muy bien para mí, ya que entonces puedo usar Formatter para obtener la dirección IP con el formato correcto.

Aquí está el ejemplo de salida:

1.utilizando getHostAddress : ***** IP=fe80::65ca:a13d:ea5a:233d%rmnet_sdio0

2.utilizando hashCode y Formatter : ***** IP=238.194.77.212

Como puedes ver, los métodos 2 me dan exactamente lo que necesito.

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(); if (!inetAddress.isLoopbackAddress()) { String ip = Formatter.formatIpAddress(inetAddress.hashCode()); Log.i(TAG, "***** IP="+ ip); return ip; } } } } catch (SocketException ex) { Log.e(TAG, ex.toString()); } return null; }


Este es mi utilidad de ayuda para leer direcciones IP y MAC. La implementación es pure-java, pero tengo un bloque de comentarios en getMACAddress() que podría leer el valor del archivo especial de Linux (Android). He ejecutado este código solo en algunos dispositivos y emulador, pero avíseme aquí si encuentra resultados extraños.

// AndroidManifest.xml permissions <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> // test functions Utils.getMACAddress("wlan0"); Utils.getMACAddress("eth0"); Utils.getIPAddress(true); // IPv4 Utils.getIPAddress(false); // IPv6

Utils.java

import java.io.*; import java.net.*; import java.util.*; //import org.apache.http.conn.util.InetAddressUtils; public class Utils { /** * Convert byte array to hex string * @param bytes toConvert * @return hexValue */ public static String bytesToHex(byte[] bytes) { StringBuilder sbuf = new StringBuilder(); for(int idx=0; idx < bytes.length; idx++) { int intVal = bytes[idx] & 0xff; if (intVal < 0x10) sbuf.append("0"); sbuf.append(Integer.toHexString(intVal).toUpperCase()); } return sbuf.toString(); } /** * Get utf8 byte array. * @param str which to be converted * @return array of NULL if error was found */ public static byte[] getUTF8Bytes(String str) { try { return str.getBytes("UTF-8"); } catch (Exception ex) { return null; } } /** * Load UTF8withBOM or any ansi text file. * @param filename which to be converted to string * @return String value of File * @throws java.io.IOException if error occurs */ public static String loadFileAsString(String filename) throws java.io.IOException { final int BUFLEN=1024; BufferedInputStream is = new BufferedInputStream(new FileInputStream(filename), BUFLEN); try { ByteArrayOutputStream baos = new ByteArrayOutputStream(BUFLEN); byte[] bytes = new byte[BUFLEN]; boolean isUTF8=false; int read,count=0; while((read=is.read(bytes)) != -1) { if (count==0 && bytes[0]==(byte)0xEF && bytes[1]==(byte)0xBB && bytes[2]==(byte)0xBF ) { isUTF8=true; baos.write(bytes, 3, read-3); // drop UTF8 bom marker } else { baos.write(bytes, 0, read); } count+=read; } return isUTF8 ? new String(baos.toByteArray(), "UTF-8") : new String(baos.toByteArray()); } finally { try{ is.close(); } catch(Exception ignored){} } } /** * Returns MAC address of the given interface name. * @param interfaceName eth0, wlan0 or NULL=use first interface * @return mac address or empty string */ public static String getMACAddress(String interfaceName) { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { if (interfaceName != null) { if (!intf.getName().equalsIgnoreCase(interfaceName)) continue; } byte[] mac = intf.getHardwareAddress(); if (mac==null) return ""; StringBuilder buf = new StringBuilder(); for (byte aMac : mac) buf.append(String.format("%02X:",aMac)); if (buf.length()>0) buf.deleteCharAt(buf.length()-1); return buf.toString(); } } catch (Exception ignored) { } // for now eat exceptions return ""; /*try { // this is so Linux hack return loadFileAsString("/sys/class/net/" +interfaceName + "/address").toUpperCase().trim(); } catch (IOException ex) { return null; }*/ } /** * Get IP address from first non-localhost interface * @param useIPv4 true=return ipv4, false=return ipv6 * @return address or empty string */ public static String getIPAddress(boolean useIPv4) { try { List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); for (NetworkInterface intf : interfaces) { List<InetAddress> addrs = Collections.list(intf.getInetAddresses()); for (InetAddress addr : addrs) { if (!addr.isLoopbackAddress()) { String sAddr = addr.getHostAddress(); //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr); boolean isIPv4 = sAddr.indexOf('':'')<0; if (useIPv4) { if (isIPv4) return sAddr; } else { if (!isIPv4) { int delim = sAddr.indexOf(''%''); // drop ip6 zone suffix return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase(); } } } } } } catch (Exception ignored) { } // for now eat exceptions return ""; } }

Descargo de responsabilidad: las ideas y el código de ejemplo de esta clase de Utils provienen de varias publicaciones de SO y Google. He limpiado y fusionado todos los ejemplos.


WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); String ipAddress = BigInteger.valueOf(wm.getDhcpInfo().netmask).toString();


private InetAddress getLocalAddress()throws IOException { 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(); if (!inetAddress.isLoopbackAddress()) { //return inetAddress.getHostAddress().toString(); return inetAddress; } } } } catch (SocketException ex) { Log.e("SALMAN", ex.toString()); } return null; }


public static 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(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { return inetAddress.getHostAddress(); } } } } catch (SocketException ex) { ex.printStackTrace(); } return null; }

He agregado inetAddress instanceof Inet4Address para verificar si es una dirección ipv4.