前言:

最近有个需求需要获取外网ip地址,找了很多资料都不行,要么是报错,于是自己整理了一下方法:

1.获取内网ip地址:

/*** 获取内网ip地址* @param context* @return*/
public static String getIntranetIPAddress(Context context) {NetworkInfo info = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();if (info != null && info.isConnected()) {if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//当前使用2G/3G/4G网络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 e) {e.printStackTrace();}
​} else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//当前使用无线网络WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//得到IPV4地址return ipAddress;}} else {//当前无网络连接,请在设置中打开网络}return null;
}
​
/*** 将得到的int类型的IP转换为String类型** @param ip* @return*/
public static String intIP2StringIP(int ip) {return (ip & 0xFF) + "." +((ip >> 8) & 0xFF) + "." +((ip >> 16) & 0xFF) + "." +(ip >> 24 & 0xFF);
}

2.测试代码如下:

3.打印日志为:

4.获取外网IP地址方法:

/*** 获取外网的IP(要访问Url,要放到后台线程里处理)** @param @return* @return String* @throws* @Title: GetNetIp* @Description:*/
public static String getNetExtraNetIpAddress() {URL infoUrl;InputStream inStream = null;String ipLine = "";HttpURLConnection httpConnection = null;try {infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8");URLConnection connection = infoUrl.openConnection();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 sb = new StringBuilder();String line;while ((line = reader.readLine()) != null){sb.append(line + "\n");}Pattern pattern = Pattern.compile("((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))");Matcher matcher = pattern.matcher(sb.toString());if (matcher.find()) {ipLine = matcher.group();}}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {inStream.close();httpConnection.disconnect();} catch (IOException e) {e.printStackTrace();} catch (Exception ex) {ex.printStackTrace();}}LogUtils.e("getNetIp", ipLine);return ipLine;
}

5.测试代码为:

6.打印日志为:61.49.113.194

7.测试了华为、小米手机,模拟器也测试了几款都能正常获取内外网IP地址,TV和盒子也能正常获取.

Android获取外网和内网ip地址相关推荐

  1. android获取设备eth0,eth1,wlan0的IP地址

    在做一些跟网络相关的需求时,很多时候需要获取到相关网络类型的IP地址,如下图: 这个时候用什么方法来获取这个IP地址呢?楼主在之前的开发中,找到了以下方法,代码如下,仅供参考: /*** Get Ip ...

  2. Android获取有线和无线(wifi)的IP地址

    /*** 获取IP* * @param context* @return*/public static String getIP(Context context) {String ip = " ...

  3. android 获取wifi的ip地址吗,Android获取有线和无线(wifi)的IP地址

    /*** 获取IP * *@paramcontext *@return */ public staticString getIP(Context context) { String ip= " ...

  4. php获取局域网主机信息,PHP如何获取客户端的“局域网内”的IP地址?

    下面摘抄:利用JS获取IE客户端IP及MAC的实现 以供大家参考: WMI Scripting HTML document.forms[0].txtMACAddr.value=unescape(MAC ...

  5. 使用 NetworkInterface 获得本机在局域网内的 IP 地址

    转载于: https://segmentfault.com/a/1190000007462741 1.问题提出 在使用 Java 开发网络程序时,有时候我们需要知道本机在局域网中的 IP 地址.很常见 ...

  6. 如何实现外网访问内网ip?公网端口映射或内网映射来解决

    本地搭建服务器应用,在局域网内可以访问,但在外网不能访问.如何实现外网访问内网ip?主要有两种方案:路由器端口映射和快解析内网映射.根据自己本地网络环境,结合是否有公网IP,是否有路由权限,设置让外网 ...

  7. 无公网IP,VB应用从外网访问内网服务器

    应用需求 之前做的板子加密工具,需要客户在工厂将所有板子先扫描一遍,然后将扫描得到的结果文件通过邮件发送给开发人员.开发人员根据收到的数据文件,生成一个加密文件,并发回给工厂.工厂收到加密数据后,需要 ...

  8. 动态IP或无公网IP时外网访问内网路由器

    路由器没有固定公网IP,如何在异地访问? 首先分析路由器可以是动态IP,或无公网IP.对应这二种情况,可以分别采用动态域名解析和端口映射实现. 动态IP时,外网访问内网路由器的实现: 1.在内网使用开 ...

  9. 外网与内网的区别、IP、IP网段划分

    外网与内网的区别 外网实际上是从 Internet 服务提供商(ISP)分配的IPv4地址块.当公司或组织要建立一个基于 IP 的网络连接到 Internet时,它们的 ISP 会给他们分配一个地址块 ...

  10. 工控攻防演示——从外网到内网控制系统设备的入侵

    给实验室写的文章,在安全客上发表,在这里再发下 一.概述 实验目的通过工控靶场学习web渗透.内网渗透.工控安全相关知识技能. 靶场信息本实验通过vmware 搭建了靶场的外网和内网环境,在内网环境中 ...

最新文章

  1. 【Python】青少年蓝桥杯_每日一题_5.21_画扇子
  2. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)
  3. Windows杀死结束进程图形化界面操作方法
  4. 简单说明c语言中常用的基本数据类型有哪些,C语言基本数据类型的.ppt
  5. ios UITableView顶部向下偏移
  6. python支付宝自动转账_python实现支付宝转账接口
  7. java observer模式_Java观察者模式(Observer)详解及应用
  8. linux read recv,read()/ recv()成功,但缓冲区未更改且为空
  9. 渐进式app_如何编写渐进式Web App新闻网站
  10. 女生适合当程序员吗?
  11. signature=d66576fde8d472a0c1dddd8b37be6b72,Signature process
  12. [转载] python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...
  13. Linux驱动——设备树
  14. CCNA自学教材推荐(转)
  15. 诺兰模型与信息化建设阶段分析
  16. 如何向别人推荐(分享)一本书
  17. java利用TOTP算法动态生成一次性密码
  18. 走进施耐德电气无锡工厂,见证自动化研发中心开幕
  19. 深度篇——人脸识别(一)  ArcFace 论文 翻译
  20. 【转摘】未来财务会是什么样子?

热门文章

  1. 期货开平,多开,空开,多平,空平
  2. matlab中figure的基本用法
  3. 软件开发方法的过程、特点、优缺点
  4. OPC UA SDK案例:虹科OPC UA SDK助力立功科技ZWS云平台
  5. 关于php 调用接口 微信云支付 HmacSha256 加密 request_content 生成 authen_code
  6. 寻找生态位置,中小险企破局生态建设——保险生态建设...
  7. 京东联盟sdk php,京东联盟新增对接sdk,配置教程
  8. 关闭445端口bat脚本
  9. 关于web的重定向,js实现重定向的方法
  10. H5拼团抽奖拆盲盒源码/价值几万的H5拼团抽奖拆盲盒模式源码