• php获取用户(客户端)真实IP地址的三种方法 第一种方法,还算靠谱,本人以前一直用的是这个方法: 查看代码 打印 01 function get_real_ip(){ 02  $ip=...

    php获取用户(客户端)真实IP地址的三种方法

    第一种方法,还算靠谱,本人以前一直用的是这个方法:

    01 function get_real_ip(){
    02     $ip=false;
    03     if(!empty($_SERVER['HTTP_CLIENT_IP'])){
    04         $ip=$_SERVER['HTTP_CLIENT_IP'];
    05     }
    06     if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    07         $ips=explode (', '$_SERVER['HTTP_X_FORWARDED_FOR']);
    08         if($ip){ array_unshift($ips$ip); $ip=FALSE; }
    09         for ($i=0; $i count($ips); $i++){
    10             if(!eregi ('^(10│172.16│192.168).'$ips[$i])){
    11                 $ip=$ips[$i];
    12                 break;
    13             }
    14         }
    15     }
    16     return ($ip $ip $_SERVER['REMOTE_ADDR']);
    17 }

    第二种方法:

    01 function get_real_ip(){
    02     static $realip;
    03     if(isset($_SERVER)){
    04         if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    05             $realip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    06         }else if(isset($_SERVER['HTTP_CLIENT_IP'])){
    07             $realip=$_SERVER['HTTP_CLIENT_IP'];
    08         }else{
    09             $realip=$_SERVER['REMOTE_ADDR'];
    10         }
    11     }else{
    12         if(getenv('HTTP_X_FORWARDED_FOR')){
    13             $realip=getenv('HTTP_X_FORWARDED_FOR');
    14         }else if(getenv('HTTP_CLIENT_IP')){
    15             $realip=getenv('HTTP_CLIENT_IP');
    16         }else{
    17             $realip=getenv('REMOTE_ADDR');
    18         }
    19     }
    20     return $realip;
    21 }

    第三种方法,摘自DISCUZ,应该还不错吧!

    01 // 获取IP地址(摘自discuz)
    02 function getIp(){
    03     $ip='未知IP';
    04     if(!empty($_SERVER['HTTP_CLIENT_IP'])){
    05         return is_ip($_SERVER['HTTP_CLIENT_IP'])?$_SERVER['HTTP_CLIENT_IP']:$ip;
    06     }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    07         return is_ip($_SERVER['HTTP_X_FORWARDED_FOR'])?$_SERVER['HTTP_X_FORWARDED_FOR']:$ip;
    08     }else{
    09         return is_ip($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:$ip;
    10     }
    11 }
    12 function is_ip($str){
    13     $ip=explode('.',$str);
    14     for($i=0;$i<count($ip);$i++){ 
    15         if($ip[$i]>255){ 
    16             return false; 
    17         
    18     
    19     return preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/',$str); 
    20 }
    转载请注明出处:php程序员的笔记
    展开全文
  •   在进行Android应用开发过程中,有时候会遇到获取当前Android设备所使用的网络IP地址的场景,有时候需要本地的网络IP地址,即局域网地址,更多的时候是需要当前网络的真实的对外IP地址,即真实的网络地址,如大...

      在进行Android应用开发过程中,有时候会遇到获取当前Android设备所使用的网络IP地址的场景,有时候需要本地的网络IP地址,即局域网地址,更多的时候是需要当前网络的真实的对外IP地址,即真实的网络地址,如大数据分析时往往需要Android设备上传本地的外网地址。本文对各种IP地址的获取进行了总结。
      首先用大家比较熟悉的电脑端局域网地址和外网地址的获取方式对比一下:(1)、电脑端局域网地址获取方式,可以通过在终端命令行输入ipconfig进行查看,如下图IPv地址标识的就是本机的局域网地址:
    在这里插入图片描述

    (2)、电脑端外网地址的获取方式,可以通过在浏览器里面查询,如在百度页面搜索“IP地址查询”查看本地外网地址,如下图是笔者本机的外网地址:
    在这里插入图片描述

    1.本地IP地址有两种情况:一是wifi下,二是移动网络下

    1.1wifi下获取本地局域网IP地址

    // wifi下获取本地网络IP地址(局域网地址)
    public static String getLocalIPAddress(Context context) {
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            if (wifiManager != null) {
                @SuppressLint("MissingPermission") WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());
                return ipAddress;
            }
            return "";
        }
    

    1.2.移动网络获取网络IP地址

    // 获取有限网IP
        public static String getHostIp() {
            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 (Exception ex) {
    
            }
            return "0.0.0.0";
    
        }
    

    2.获取外网地址(非移动网络

      获取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")/* + "(" + data.getString("country")
                                + data.getString("area") + "区"
                                + data.getString("region") + data.getString("city")
                                + data.getString("isp") + ")"*/;
    
                        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;
        }
    

    3.根据网络类型集成方法

    @SuppressLint("MissingPermission")
        public static String getIpAddress(Context context) {
            if (context == null) {
                return "";
            }
    
            ConnectivityManager conManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            try {
                NetworkInfo info = conManager.getActiveNetworkInfo();
                if (info != null && info.isConnected()) {
                    // 3/4g网络
                    if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                        return getHostIp();
                    } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
    //                    return getLocalIPAddress(context); // 局域网地址
                        return getOutNetIP(); // 外网地址
                    } else if (info.getType() == ConnectivityManager.TYPE_ETHERNET) {
                        // 以太网有限网络
                        return getHostIp();
                    }
                }
            } catch (Exception e) {
                return "";
            }
            return "";
    
        }
    
    展开全文
  • Android获取公网IP地址

    2020-04-02 11:59:49
    Android想要获取公网IP地址,连接wifi的情况下在应用层开发的角度使用系统的API是做不到的,只能直接或间接利用第三方的接口服务: 1、公共接口: 搜狐: http://pv.sohu.com/cityjson 返回格式: var returnCitySN...

    Android想要获取公网IP地址,连接wifi的情况下在应用层开发的角度使用系统的API是做不到的,只能直接或间接利用第三方的接口服务:
    1、公共接口:

    搜狐:

    http://pv.sohu.com/cityjson
    

    返回格式:

    var returnCitySN = {"cip": "XXXX", "cid": "XXX", "cname": "XX省XX市"};
    

    淘宝(不稳定,经常访问不了):

    http://ip.taobao.com/service/getIpInfo2.php?ip=myip
    

    注意:淘宝的接口在请求时需要添加 “User-Agent” : “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36 Edg/80.0.361.109”,因为淘宝的这个接口只能用于PC浏览器访问,所以需要添加该标识让服务器认为这个请求是PC浏览器发起的。

    返回格式:

    {"code":0,"data":{"ip":"XXXXXX","country":"中国","area":"","region":"XX","city":"XX","county":"XX","isp":"XX","country_id":"CN","area_id":"","region_id":"XXX","city_id":"XXX","county_id":"xx","isp_id":"XXX"}}
    

    在APP中调用接口,然后手动解析出IP地址,另外这两个接口都是http请求,在高版本系统上会出现请求失败,是因为从Android 9.0开始默认禁止了http请求,可以通过清单文件添加配置解决:
    在这里插入图片描述
    文件名随便起,文件内配置如下:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
    

    优点:无需接入门槛即可使用。
    缺点:不稳定,接口不可用或者有改动,会发生异常。

    2、各个地图服务API,比如:腾讯位置服务、百度地图、高德地图等等,需要到各平台注册成为开发者后才能使用API,并且还可能存在调用次数的限制。

    所以建议采用多种策略进行获取。

    展开全文
  • 在应用调试过程中,对接的技术人员要求提供一下机顶盒 的外网IP地址,于是打开了盒子上的设置,将IP地址发了过去,对面回复说这是私网IP,要公网IP才可以。 一般情况下,电脑的公网IP地址很好查:打开百度: ...

    在应用调试过程中,对接的技术人员要求提供一下机顶盒 的外网IP地址,于是打开了盒子上的设置,将IP地址发了过去,对面回复说这是私网IP,要公网IP才可以。

    一般情况下,电脑的公网IP地址很好查:打开百度:

    但是有些机顶盒上是没有浏览器的,所以就需要通过代码的层面来获取。

    通过百度,先找到了如下的方法:

     /**
         * 获取IP地址
         * @return
         * @throws SocketException
         */
        public static String getLocalIPAddress() throws SocketException {
            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().toString();
                    }
                }
            }
            return "null";
        }

    但是获取到的结果和机顶盒设置里的ip一致的,也就是说还是一个私网IP。

    后经过查询,可通过如下方式获取公网IP:

     /**
         * 获取外网IP地址
         * @return
         */
        public static String GetNetIp(){
            String IP = "";
            try {
                String address = "http://ip.taobao.com/service/getIpInfo2.php?ip=myip";
                URL url = new URL(address);
    
                //URLConnection htpurl=url.openConnection();
    
                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");
    
                    if (code.equals("0")) {
                        JSONObject data = jsonObject.getJSONObject("data");
                        IP = data.getString("ip") + "(" + data.getString("country")
                                + data.getString("area") + "区"
                                + data.getString("region") + data.getString("city")
                                + data.getString("isp") + ")";
    
                        Log.e("提示", "您的IP地址是:" + IP);
                    } else {
                        IP = "";
                        Log.e("提示", "IP接口异常,无法获取IP地址!");
                    }
                } else {
                    IP = "";
                    Log.e("提示", "网络连接异常,无法获取IP地址!");
                }
            } catch (Exception e) {
                IP = "";
                Log.e("提示", "获取IP地址时出现异常,异常信息是:" + e.toString());
            }
            return IP;
        }

    在代码中调用:

     try {
                String localIPAddress = IPutils.getLocalIPAddress();
                LogUtil.Log_i("IP地址:"+localIPAddress);
            } catch (SocketException e) {
                e.printStackTrace();
            }
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    String s = IPutils.GetNetIp();
                    LogUtil.Log_i("外网IP:"+s);
                }
            }).start();

    获取到的结果:

    外网IP:221.220.160.241(中国区北京北京联通)

    这说明是成功的。需要注意的是,获取外网IP的方法必须要在子线程中执行。

     

    附完整的工具类:

    package com.zyp.river.utils;
    
    import android.util.Log;
    
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.Inet4Address;
    import java.net.InetAddress;
    import java.net.MalformedURLException;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Enumeration;
    
    /**
     * Created by ZhangYanPeng on 2018/9/19.
     */
    public class IPutils {
    
        /**
         * 获取IP地址
         * @return
         * @throws SocketException
         */
        public static String getLocalIPAddress() throws SocketException {
            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().toString();
                    }
                }
            }
            return "null";
        }
    
    
        /**
         * 获取外网IP地址
         * @return
         */
        public static String GetNetIp(){
            String IP = "";
            try {
                String address = "http://ip.taobao.com/service/getIpInfo2.php?ip=myip";
                URL url = new URL(address);
    
                //URLConnection htpurl=url.openConnection();
    
                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");
    
                    if (code.equals("0")) {
                        JSONObject data = jsonObject.getJSONObject("data");
                        IP = data.getString("ip") + "(" + data.getString("country")
                                + data.getString("area") + "区"
                                + data.getString("region") + data.getString("city")
                                + data.getString("isp") + ")";
    
                        Log.e("提示", "您的IP地址是:" + IP);
                    } else {
                        IP = "";
                        Log.e("提示", "IP接口异常,无法获取IP地址!");
                    }
                } else {
                    IP = "";
                    Log.e("提示", "网络连接异常,无法获取IP地址!");
                }
            } catch (Exception e) {
                IP = "";
                Log.e("提示", "获取IP地址时出现异常,异常信息是:" + e.toString());
            }
            return IP;
        }
    }
    

     

    展开全文
  • 由于之前学过一段时间的Android,同时又在上Android开发的个性课,于是就自然萌发出了一个自己通过编写Android程序获取ip相关信息的小程序。手机在连入局域网的WiFi的时候,会自动获取IP地址信息到本机,然后可以...

    现在博主在上大三,正在学习一些计算机网络的一些概念,知道了局域网ip和网关ip不同的概念,当时还纳了闷了2的32次方好像不咋够用啊,原来是这个样子。

    由于之前学过一段时间的Android,同时又在上Android开发的个性课,于是就自然萌发出了一个自己通过编写Android程序获取ip相关信息的小程序。

    手机在连入局域网的WiFi的时候,会自动获取IP地址信息到本机,然后可以通过“设置→系统→关于手机→状态信息→IP地址”查看当前的IP地址,得到的应该是IPv6的,不过下方的如“192.168.1.102”就是对应的IPv4的地址,而如果通过4G流量上网的话,那么得到的直接就是IPv4的。

    而网关ip也可以说是外网ip则需要与互联网有过信息交流后才能知道,所以要通过一次网络连接才可以,而不少网站(诸如:http://city.ip138.com/city0.asphttp://ip.taobao.com/service/getIpInfo2.php?ip=myip)也提供了查询本机网关ip的服务,只要直接从浏览器输入地址即可得到相关信息。

    然而博主要说的是这是诸如2011年、2014年那时候的说法,在目前的实践中已经不太可行了,就比如ip138那个,键入后其实会被链接到http://1212.ip138.com/ic.asp,故当前的话应该将查询网址设为1212的,至于淘宝的那个,如果用电脑浏览器打开的话, 是可以获取到信息的,并且还很详细,可是如果用手机(博主用的是UC浏览器,Android),会出现一个下载php文件的提示,浏览器无法直接解析php文件,所以这种方法也是不可行的,同时博主自己也实际测试了一下发现确实不可以,至少目前我的不可以(Android5.1 华为)。

    于是在网上查找并参考了相关资料之后,思路也就基本有了。说实话,现在的网络真的实在是太便捷,真的是很大的一个助手,各种博客论坛开源项目git的存在,程序员的日子已经相对而言很好了。

    然而在代码初次编写后发现程序可以获取本机IP、MAC地址,这很容易,直接获取就是了,然而网关IP的获取则崩溃了。

    后来发现这个网络操作应该放在子线程来进行,应该通过回调来通知主线程更新UI。
    然而修改完成后发现还是无法成功,最后发现是他喵的没有申请android.permission.INTERNET权限。

    然而功夫不负有心人,最终还是完成了,嘻嘻。

    起初我是想把获取IP信息放在一个类里面通过提供一些方法来实现模块的复用和松耦合,最后发现在网关IP这里失败了,由于要进行异步操作,更新UI操作,无法实现代码独立。
    所以最终做成了这个样子:


    这里是主Activity代码

    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.text.Html;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    public class MainActivity extends AppCompatActivity {
        static final String TAG = "MainActivity";
        public static final int UPDATE_TEXT = 1;
        Button mButton;
        TextView textview;
        //通过Handler实现对主线程UI更新的回调
        private Handler mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case UPDATE_TEXT:
                        IPInfomation ipinfo = new IPInfomation(MainActivity.this);
                        String ipadd = ipinfo.getWIFILocalIpAdress();
                        String macadd = ipinfo.getMacAddress();
                        //String hostip = ipinfo.getHostAddress();
                        Log.i(TAG, "onClick: sfafdasf");
                        //textview.setText("内网ip为:"+ipadd+"\nMAC地址为:"+macadd);
                        String hostip = (String) msg.obj;
                        //String ipinfo = (String)textview.getText();
                        textview.setText("内网ip为:"+ipadd+"\nMAC地址为:"+macadd+"\n网关地址为:"+hostip);
                        break;
                    default:
                        break;
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mButton = (Button) findViewById(R.id.button);
            textview = (TextView) findViewById(R.id.textView);
            mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //创建一个新的工作线程用来执行网络操作,这里用到了OKHttp开源库
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            URL infoUrl = null;
                            InputStream inStream = null;
                            Log.i(TAG, "haha");
                            try
                            {
                                OkHttpClient client = new OkHttpClient();
                                Request request = new Request.Builder().url("http://1212.ip138.com/ic.asp").build();
                                Response response = client.newCall(request).execute();
                                String responseData = response.body().string();
                                responseData = Html.fromHtml(responseData).toString();
                                String hostIp = responseData.substring(responseData.indexOf("[") + 1, responseData.indexOf("]"));
                                Log.i(TAG, hostIp);
                                Message message = new Message();
                                message.what = UPDATE_TEXT;
                                message.obj = hostIp;
                                mHandler.sendMessage(message);
                            }
                            catch(MalformedURLException e) {
                                e.printStackTrace();
                            }
                            catch (IOException e) {
                                e.printStackTrace();
                            }
                            //下面的操作只是对通过淘宝接口获取的一次尝试,经实践证实,失败了。
                            String IP = "";
                            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);
    
                                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");
                                    }
                                    Log.i(TAG, retJSON.toString());
                                    JSONObject jsonObject = new JSONObject(retJSON.toString());
                                    String code = jsonObject.getString("code");
                                    if (code.equals("0"))
                                    {
                                        JSONObject data = jsonObject.getJSONObject("data");
                                        IP = data.getString("ip") + "(" + data.getString("country")
                                                + data.getString("area") + "区"
                                                + data.getString("region") + data.getString("city")
                                                + data.getString("isp") + ")";
    
                                        Log.e(TAG, "您的IP地址是:" + IP);
                                    }
                                    else
                                    {
                                        IP = "";
                                        Log.e(TAG, "IP接口异常,无法获取IP地址!");
                                    }
                                }
                                else
                                {
                                    IP = "";
                                    Log.e(TAG, "网络连接异常,无法获取IP地址!");
                                }
                            }
                            catch (Exception e)
                            {
                                IP = "";
                                Log.e(TAG, "获取IP地址时出现异常,异常信息是:" + e.toString());
                            }
                        }
                    }).start();
    
                }
            });
            Log.i(TAG, "onCreate: ");
        }
    }

    以下是IPInfomation类的代码实现:

    import android.content.Context;
    import android.net.wifi.WifiInfo;
    import android.net.wifi.WifiManager;
    
    
    /**
     * Created by defangfang on 2017/3/29.
     */
    
    public class IPInfomation {
        private  WifiManager mWifiManager;
        private  WifiInfo mWifiInfo;
    
        public IPInfomation(Context mContext){
    
            //获取wifi服务
            mWifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
            //判断wifi是否开启
            if (!mWifiManager.isWifiEnabled()) {
                mWifiManager.setWifiEnabled(true);
            }
            mWifiInfo = mWifiManager.getConnectionInfo();
        }
        public  String getWIFILocalIpAdress() {
            int ipAddress = mWifiInfo.getIpAddress();
            return formatIpAddress(ipAddress);
        }
        private static String formatIpAddress(int ipAdress) {
    
            return (ipAdress & 0xFF ) + "." +
                    ((ipAdress >> 8 ) & 0xFF) + "." +
                    ((ipAdress >> 16 ) & 0xFF) + "." +
                    ( ipAdress >> 24 & 0xFF) ;
        }
        public  String getMacAddress() {
            return mWifiInfo.getMacAddress();
        }
    
    
    }

    界面如下:
    卧槽怎么这么大啊!


    Over

    展开全文
  • 银联安全检测,在支付的时候,必须传入公网ip的,作为风控的必传字段,但是公网ip不能直接获取,所以就使用第三方阿里的接口来获取公网ip。 代码: 为防止和项目中已经封装好的Retrofit框架冲突,这里通过...
  • Android获取手机当前所在经纬度请参考:http://blog.csdn.net/a511341250/article/details/40509931
  • 项目组最近添加新需求,要获取客户端和服务端IP,削微研究了一下,总结如下: 1、获取客户端外网IP(为啥不要内网,因为那玩意没鸟用,外网IP起码能确定客户端的地区位置) 目前只有一种方法可以获取:发送...
  • 在做微信一键上网的功能,原本是用php来做,天知道原来苹果和安卓版的微信浏览器获取到的IP地址还是不一样的,苹果版的IP地址是真实的,安卓版的地址居然是代理地址(为何小龙要这处理?谁知道?),天知道用尽php所有...
  • public static String GetNetIp() { String IP = ""; try { String address = "http://ip.taobao.com/service/getIpInfo2.php?ip=myip"; URL url = new URL(address); // URLConnec
  • 本文我们分享几个android开发中获取wifi外网ip的实例,这段代码是非常实例的代码片断,基乎每个项目都需要用到,值得收藏。 android获取wifi外网ip的方法 // 获取外网IP  public static String ...
  • 获取虚拟机的IP地址

    2017-10-31 11:46:30
    获取虚拟机的IP地址
  • 问题来源获取用户客户端IP地址是一个很简单的需求。用户打开网页,发送一个HTTP请求,后台从中提取出IP地址。但是,在使用微信打开网页时,发现获取到的IP地址和在浏览器打开所得到的IP地址不一样。用不同的浏览器,...
  • (经过测试简单测试发现:4G网手机IP获取地址信息不准确,电脑连VPN获取IP获取地址信息不准确)   360获取本机IP、地区及运营商 接口地址:http://ip.360.cn/IPShare/info 传递参数:无 返回类型:json ...
  • android获取php简单数据

    2013-11-24 15:16:48
    android获取php数据 步骤: 1 加入权限: 2启动一个新线程 android4.0开始不允许直接在ui线程直接操作httpClient 3 注意url:http://10.0.2.2/testAndroid.php (不要填写:127.0.0.1 这个是本机电脑的,模拟器...
  • //通过淘宝的服务来定位WAN的IP,否则获取路由IP没什么用 NSURL *ipURL = [NSURL URLWithString:@"http://ip.taobao.com/service/getIpInfo.php?ip=myip"]; NSData *data = [NSData dataWi...
  • 访问http://ip.taobao.com/service/getIpInfo2.php?ip=myip接口,解析json即可。获取到的是外网的ip
  • 新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.192.3.42 搜狐IP地址查询接口...
  • AndServer是一个Android端的Web服务器,类似Apache或者Tomcat,它是一个普通的Android Library,Android项目Gradle远程依赖或者添加Jar包皆可引入即可进行开发。
  • import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import org.json.JSONOb.....
1 2 3 4 5 ... 20
收藏数 6,271
精华内容 2,508