Android手机获取外网ip(by 星空武哥)
转载请标注原创地址:http://blog.csdn.net/lsyz0021/article/details/51234178
今天有个朋友要获取Android手机当前连入网络的ip,问我怎么做,我一想这还不简单。告诉他先判断是什么网络环境,如果是WiFi可以通过WifiManager获取到,如果是流量(2G、3G或者4G网)就通过NetworkInterface遍历获取getHostAddress()获得,但是他们要求获取不是路由器发出的局域网ip,而是当前的外网ip,一般我们手机连接路由器,路由器分给我们的ip都是路由器转发的C网段的局域网ip,也就是192.168.x.xx 这样的网段,但是我们想要的真实的外网ip怎么获取呢?
首先,打开百度输入“ip”,你会发现他会显示你当前电脑连接的外网ip,也就是你的真实ip。
百度是可以通过搜索“ip”就能显示我们想要 的外网ip的,但是我们android代码怎么获取呢?难道我们就携带必要的请求参数,通过get请求百度然后再通过结果来获取我们要的信息吗?这个请求的页面数据比较多,有没有更简洁的结果呢???
通过点击“IP地址查询”的超链接,你会发现……
这个Url (http://www.ip138.com/)也可以获取到我们想要的ip,那么这个页面的信息还是有点多,通过查看该页面的源代码我们发现……
这个页面其实也是通过请求另一个地址(http://1212.ip138.com/ic.asp)来获取的,打开该页面,我们发现返回的数据好简洁哦!
通过查看该页面的源代码发现……我们可以获取字符的“[]”标志,来获取我们要的ip信息的
通过上面的分析我们最终找到了地址 http://1212.ip138.com/ic.asp ,通过这个地址我们就能获取我们要的ip。那么接下来就要界面该页面的返回的数据了。
写了一个简单的工具类
/** * Created by Lilu */public class IPUtil { /** * 获取外网的IP(必须放到子线程里处理) */ public static String getNetIp() { String ip = ""; InputStream inStream = null; try { URL infoUrl = new URL("http://1212.ip138.com/ic.asp"); 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, "gb2312")); StringBuilder builder = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { builder.append(line); //builder.append(line).append("\n"); } inStream.close(); int start = builder.indexOf("["); int end = builder.indexOf("]"); ip = builder.substring(start + 1, end); return ip; } } catch (IOException e) { e.printStackTrace(); } return null; }}
因为用到了网络请求,不要忘了添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
简单的用TextView显示了我们获取的外网ip
public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); new Thread(new Runnable() { @Override public void run() { // 获取外网ip final String ip = IPUtil.getNetIp(); runOnUiThread(new Runnable() { @Override public void run() { tv.setText("ip = "+ip); } }); } }).start(); }}
拿出微信 扫码关注下面的微信订阅号,及时获取更多推送文章
Android手机获取外网ip(by 星空武哥)相关推荐
- 怎样获得手机的外网ip???
https://zhidao.baidu.com/question/553678198736986612.html [重点] 这个和电脑一样,只需要在手机的浏览器上百度搜索一下ip就可以知道了. -- ...
- python切换ip群发邮件_python获取外网IP并发邮件的实现方法
第一步:通过ip138来爬取外网ip 第二步:通过python的smtplib模块和email来发送邮件,具体用法去网上搜索, 下面是代码示例: #!/usr/bin/env python #codi ...
- delphi获取外网IP
delphi获取外网IP function getIp():string; var url:string; myIdHttp:TIdHTTP; data:ISuperObject; beginResu ...
- 怎样查询本机ip地址?如何利用花生壳获取外网IP教程
听到ip地址这个概念,想必大家都不会陌生,如果我们想要跟对方进行通信,通常我们需要知道对方的ip地址,另外在网络通信中,还有一个非常重要的地址,那就是mac地址.那么我们如何知道本机ip地址呢?我们如 ...
- python获取公网ip的几种方式_python获取外网ip地址的方法总结
本文实例总结了python获取外网ip地址的方法.分享给大家供大家参考.具体如下: 一.利用脚本引擎库直接获取 import console; import web.script import ine ...
- 获取外网IP,再根据IP定位城市
根据ip定位城市对外开放的接口,有些接口不能直接用了,比如说淘宝接口.这里我用的是一个不知名的接口. 1.AddressUtil工具类 package cn.ztjz.module.audit.uti ...
- vue中获取外网IP的方法
记一下如何在vue项目中获取外网IP 之前有篇文章js获取客户端真实IP记录了如何获取外网IP 那个只是在普通html页面当中的获取方法,在vue项目中就不能这么使用了. 这里介绍一种适用于vue项目 ...
- 如何从HttpServletRequest中获取外网IP地址
如何从HttpServletRequest中获取外网IP地址 Java 中可以通过HttpServletRequest类的getRemoteAddr(); //可能是用户真是ip也可能是代理服务器的i ...
- 如何获取外网IP地址
1. 获取外网IP的方法: 获取外网IP地址方法: 访问网站:http://www.3322.org/dyndns/getip 访问网站:http://city.ip138.com/ip2city. ...
- 获取外网IP地址API
1.获取外网IP地址 地址: http://pv.sohu.com/cityjson?ie=utf-8 返回结果: var returnCitySN = {"cip": " ...
最新文章
- 简易快速的开发,需要一个快速开发平台来支持
- Bzoj1511---OKR-Periods of Words(KMP)
- tril--下三角矩阵的抽取
- 三级pc技术_EeIE智博会展商推荐鑫路远—专业从事液控设备的研发、生产和销售的高新技术企业...
- SAP UI5 应用开发教程之五十三 - 如何自定义 SAP UI5 数据类型(Data Type)试读版
- 如何使用Marketing Cloud的扩展字段作为搜索条件进行搜索
- 如何在 C# 中使用 MSMQ
- python的序列包括字符串列表和什么_Python基础:03序列:字符串、列表和元组
- ios系统脚本服务器加速,提高iOS项目的编译速度
- python解题软件哪个好用_几个好用的Python数据分析工具
- 关联规则java apriori_关联规则算法(The Apriori algorithm)详解
- 用JAVA使用mysql命令操作导入SQL脚本
- 易语言学习笔记(1)
- vs2003远程调试方法
- On the Sense of Humor [附译文]
- 3097: Hash Killer I
- 编程常用英语单词(一)
- 传奇 定时任务(泡点、时间触发、任务活动等)
- 用Sendmail转寄信件
- 压缩软件如何删除压缩包密码(zip、rar、7-zip),忘记密码如何删除密码?