转载请标注原创地址: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 星空武哥)相关推荐

  1. 怎样获得手机的外网ip???

    https://zhidao.baidu.com/question/553678198736986612.html [重点] 这个和电脑一样,只需要在手机的浏览器上百度搜索一下ip就可以知道了. -- ...

  2. python切换ip群发邮件_python获取外网IP并发邮件的实现方法

    第一步:通过ip138来爬取外网ip 第二步:通过python的smtplib模块和email来发送邮件,具体用法去网上搜索, 下面是代码示例: #!/usr/bin/env python #codi ...

  3. delphi获取外网IP

    delphi获取外网IP function getIp():string; var url:string; myIdHttp:TIdHTTP; data:ISuperObject; beginResu ...

  4. 怎样查询本机ip地址?如何利用花生壳获取外网IP教程

    听到ip地址这个概念,想必大家都不会陌生,如果我们想要跟对方进行通信,通常我们需要知道对方的ip地址,另外在网络通信中,还有一个非常重要的地址,那就是mac地址.那么我们如何知道本机ip地址呢?我们如 ...

  5. python获取公网ip的几种方式_python获取外网ip地址的方法总结

    本文实例总结了python获取外网ip地址的方法.分享给大家供大家参考.具体如下: 一.利用脚本引擎库直接获取 import console; import web.script import ine ...

  6. 获取外网IP,再根据IP定位城市

    根据ip定位城市对外开放的接口,有些接口不能直接用了,比如说淘宝接口.这里我用的是一个不知名的接口. 1.AddressUtil工具类 package cn.ztjz.module.audit.uti ...

  7. vue中获取外网IP的方法

    记一下如何在vue项目中获取外网IP 之前有篇文章js获取客户端真实IP记录了如何获取外网IP 那个只是在普通html页面当中的获取方法,在vue项目中就不能这么使用了. 这里介绍一种适用于vue项目 ...

  8. 如何从HttpServletRequest中获取外网IP地址

    如何从HttpServletRequest中获取外网IP地址 Java 中可以通过HttpServletRequest类的getRemoteAddr(); //可能是用户真是ip也可能是代理服务器的i ...

  9. 如何获取外网IP地址

    1.  获取外网IP的方法: 获取外网IP地址方法: 访问网站:http://www.3322.org/dyndns/getip 访问网站:http://city.ip138.com/ip2city. ...

  10. 获取外网IP地址API

    1.获取外网IP地址 地址: http://pv.sohu.com/cityjson?ie=utf-8 返回结果: var returnCitySN = {"cip": " ...

最新文章

  1. 简易快速的开发,需要一个快速开发平台来支持
  2. Bzoj1511---OKR-Periods of Words(KMP)
  3. tril--下三角矩阵的抽取
  4. 三级pc技术_EeIE智博会展商推荐鑫路远—专业从事液控设备的研发、生产和销售的高新技术企业...
  5. SAP UI5 应用开发教程之五十三 - 如何自定义 SAP UI5 数据类型(Data Type)试读版
  6. 如何使用Marketing Cloud的扩展字段作为搜索条件进行搜索
  7. 如何在 C# 中使用 MSMQ
  8. python的序列包括字符串列表和什么_Python基础:03序列:字符串、列表和元组
  9. ios系统脚本服务器加速,提高iOS项目的编译速度
  10. python解题软件哪个好用_几个好用的Python数据分析工具
  11. 关联规则java apriori_关联规则算法(The Apriori algorithm)详解
  12. 用JAVA使用mysql命令操作导入SQL脚本
  13. 易语言学习笔记(1)
  14. vs2003远程调试方法
  15. On the Sense of Humor [附译文]
  16. 3097: Hash Killer I
  17. 编程常用英语单词(一)
  18. 传奇 定时任务(泡点、时间触发、任务活动等)
  19. 用Sendmail转寄信件
  20. 压缩软件如何删除压缩包密码(zip、rar、7-zip),忘记密码如何删除密码?

热门文章

  1. 一线二线城市工作的区别
  2. 音乐Npc弹窗 c#
  3. 【亲自实践能够下载的谷歌地图切片url地址】谷歌地图数据下载的尝试以及Python爬虫实现
  4. 如何将PDF转换成jpg图片?教你2种免费方法
  5. ubuntu系统下快速安装谷歌浏览器(图文教程)
  6. 转载:H.264 H.265 硬件解码芯片?
  7. BZOJ 3669 luogu 2387 魔法森林
  8. CentOS7安装显卡驱动
  9. javaScript重定向页面
  10. 电梯管理php,楼道电梯管理的几种方式