您的位置:首页 > 移动开发 > Android开发

android Ip获取过滤掉ipv6正确获取到IP

2016-08-29 14:53 211 查看
android Ip获取过滤掉ipv6正确获取到IP

public class MainActivity extends Activity {

    private TextView iptv;

    private TextView iptv2;

    private String outips;

    Handler mHandler = new Handler() {

        public void handleMessage(android.os.Message msg) {

            switch (msg.what) {

            case 0:

                iptv.setText(outips);

                break;

            default:

                break;

            }

        };

    };

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        iptv = (TextView) findViewById(R.id.ip);

        iptv2 = (TextView) findViewById(R.id.ip2);

        // 获取wifi服务

        String ips = null;

        try {

            ips = GetIpAddress();

            iptv2.setText(ips);

        } catch (SocketException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

     

    }

    private String intToIp(int i) {

        return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)

                + "." + (i >> 24 & 0xFF);

    }

    /**

     * if (intf.getName().toLowerCase().equals("eth0") ||

     * intf.getName().toLowerCase().equals("wlan0")) 表示:仅过滤无线和有线的ip.

     * networkInterface是有很多的名称的 比如sim0,remt1.....等等.我不需要用到就直接过滤了

     * 

     * if (!ipaddress.contains("::")) 表示: 过滤掉ipv6的地址.不管无线还是有线 都有这个地址,

     * 我这边显示地址大体是:fe80::288:88ff:fe00:1%eth0 fe80::ee17:2fff:fece:c0b4%wlan0

     * 一般都是出现在第一次循环.第二次循环就是真正的ipv4的地址.

     * 

     * @return

     * @throws SocketException

     */

    public String GetIpAddress() throws SocketException {

        String ipaddress = "";

        Enumeration<NetworkInterface> netInterfaces = null;

        try {

            netInterfaces = NetworkInterface.getNetworkInterfaces();

            while (netInterfaces.hasMoreElements()) {

                NetworkInterface intf = netInterfaces.nextElement();

                if (intf.getName().toLowerCase().equals("eth0")

                        || intf.getName().toLowerCase().equals("wlan0")) {

                    for (Enumeration<InetAddress> enumIpAddr = intf

                            .getInetAddresses(); enumIpAddr.hasMoreElements();) {

                        InetAddress inetAddress = enumIpAddr.nextElement();

                        if (!inetAddress.isLoopbackAddress()) {

                            ipaddress = inetAddress.getHostAddress().toString();

                            if (!ipaddress.contains("::")) {// ipV6的地址

                                ipaddress = ipaddress;

                            }

                        }

                    }

                } else {

                    continue;

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        }

        return ipaddress;

    }

    String GetNetIp(String ipaddr) {

        URL infoUrl = null;

        InputStream inStream = null;

        try {

            infoUrl = new URL(ipaddr);

            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();

                String line = null;

                while ((line = reader.readLine()) != null)

                    strber.append(line + "\n");

                inStream.close();

                return strber.toString();

            }

        } catch (MalformedURLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return "";

    }

    // private InetAddress getLocalIpAddress() throws UnknownHostException {

    // WifiManager wifiManager = (WifiManager) MainActivity.this

    // .getSystemService(android.content.Context.WIFI_SERVICE);

    // WifiInfo wifiInfo = wifiManager.getConnectionInfo();

    // int ipAddress = wifiInfo.getIpAddress();

    // return InetAddress.getByName(String.format("%d.%d.%d.%d",

    // (ipAddress & 0xff), (ipAddress >> 8 & 0xff),

    // (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff)));

    // }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: