时间:2021-05-20
在进行Android应用开发过程中,有时候会遇到获取当前Android设备所使用的网络IP地址的场景,有时候需要本地的网络IP地址,即局域网地址,更多的时候是需要当前网络的真实的对外IP地址,即真实的网络地址,如大数据分析时往往需要Android设备上传本地的外网地址。本文对各种IP地址的获取进行了总结。
首先用大家比较熟悉的电脑端局域网地址和外网地址的获取方式对比一下:(1)、电脑端局域网地址获取方式,可以通过在终端命令行输入ipconfig进行查看,如下图IPv地址标识的就是本机的局域网地址:
(2)、电脑端外网地址的获取方式,可以通过在浏览器里面查询,如在百度页面搜索“IP地址查询”查看本地外网地址,如下图是笔者本机的外网地址:
本地IP地址有两种情况:一是wifi下,二是移动网络下
获取Android设备的外网地址,即当前Wifi网络真正的网络地址,也即是网络运营商分配给用户的IP地址。
获取外网地址的原理:通过访问外网网站,从网站返回的数据中解析本地的IP地址。PS:在本地是无法获取到外网的IP地址的,需要借助服务器。
/** * 获取外网ip地址(非本地局域网地址)的方法 */public static String getOutNetIP() { String ipAddress = ""; try { String address = "http://ip.taobao.com/service/getIpInfo2.php?ip=myip"; URL url = new URL(address); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setUseCaches(false); connection.setRequestMethod("GET"); connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.7 Safari/537.36"); //设置浏览器ua 保证不出现503 if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { InputStream in = connection.getInputStream(); // 将流转化为字符串 BufferedReader reader = new BufferedReader( new InputStreamReader(in)); String tmpString; StringBuilder retJSON = new StringBuilder(); while ((tmpString = reader.readLine()) != null) { retJSON.append(tmpString + "\n"); } JSONObject jsonObject = new JSONObject(retJSON.toString()); String code = jsonObject.getString("code"); Log.e(TAG, "提示:" +retJSON.toString()); if (code.equals("0")) { JSONObject data = jsonObject.getJSONObject("data"); ipAddress = data.getString("ip"); Log.e(TAG, "您的IP地址是:" + ipAddress); } else { Log.e(TAG, "IP接口异常,无法获取IP地址!"); } } else { Log.e(TAG, "网络连接异常,无法获取IP地址!"); } } catch (Exception e) { Log.e(TAG, "获取IP地址时出现异常,异常信息是:" + e.toString()); } return ipAddress; }下面在为大家提供两个获取手机IP地址的实例源码
获取内网IP地址
/** * 获取ip地址 * @return */ public static String getHostIP() { String hostIp = null; try { Enumeration nis = NetworkInterface.getNetworkInterfaces(); InetAddress ia = null; while (nis.hasMoreElements()) { NetworkInterface ni = (NetworkInterface) nis.nextElement(); Enumeration<InetAddress> ias = ni.getInetAddresses(); while (ias.hasMoreElements()) { ia = ias.nextElement(); if (ia instanceof Inet6Address) { continue;// skip ipv6 } String ip = ia.getHostAddress(); if (!"127.0.0.1".equals(ip)) { hostIp = ia.getHostAddress(); break; } } } } catch (SocketException e) { Log.i("yao", "SocketException"); e.printStackTrace(); } return hostIp; }获取外网IP地址
/** * 获取IP地址 * @return */ public static String GetNetIp() { URL infoUrl = null; InputStream inStream = null; String line = ""; try { infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8"); URLConnection connection = infoUrl.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection) connection; int responseCode = httpConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { inStream = httpConnection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8")); StringBuilder strber = new StringBuilder(); while ((line = reader.readLine()) != null) strber.append(line + "\n"); inStream.close(); // 从反馈的结果中提取出IP地址 int start = strber.indexOf("{"); int end = strber.indexOf("}"); String json = strber.substring(start, end + 1); if (json != null) { try { JSONObject jsonObject = new JSONObject(json); line = jsonObject.optString("cip"); } catch (JSONException e) { e.printStackTrace(); } } return line; } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return line; }本文主要讲解了Android获取手机内网IP地址与外网IP地址的详细方法与源码实例,更多关于Android开发知识与技巧请查看下面的相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#实现获取本地内网(局域网)和外网(公网)IP地址的方法。分享给大家供大家参考,具体如下:1、获取本机的IP地址集合://////获取本机所有i
本文实例讲述了android实现获取有线和无线Ip地址的方法。分享给大家供大家参考。具体如下:做android的开发时,遇到了获取有线ip地址的问题.不多说上代
本文实例讲述了THinkPHP获取客户端IP与IP地址查询的方法。分享给大家供大家参考,具体如下:TP中获取客户端IP地址的系统公共函数是:functionge
360随身WiFi使用后,手机连接WiFi总是正在获取IP地址。这里采用了手机设置静态IP,与360随身wifi统一IP地址域的方法。1、插入360随身WiFi
今天查看登录日志,发现http_x_forwarded_for获取到的ip地址有些是内网ip地址,有些则是公网和内网ip地址一起获取到,用逗号分隔开,日志截图如