Android,获取用户IP地址

时间:2015-01-24 11:40:20

标签: android sockets ip

我正在使用以下方法获取客户端ip:

public static String getIPAddress(boolean useIPv4) {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress()) {
                    String sAddr = addr.getHostAddress().toUpperCase();
                    boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    if (useIPv4) {
                        if (isIPv4)
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // drop ip6 port suffix
                            return delim<0 ? sAddr : sAddr.substring(0, delim);
                        }
                    }
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

在我的套接字测试中,我的Genymotion模拟器在其状态栏上有“192.168.56.101”,我可以运行一个套接字并连接到它,它工作正常,

但是在同一个模拟器中,当我运行此方法获取ip时,它将返回“10.0.3.15”,因为它必须返回“192.168.56.101”。

我不知道这怪异的来自哪里! (“10.0.3.15”)

我如何获得真正的用户IP地址,我想通过套接字连接两个人,所以我想我必须拥有他们的Ip所以我可以连接它们,或者,这是一个更好的方法吗?

1 个答案:

答案 0 :(得分:3)

这对我有用:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

10.0.3.15是Geneymotion中的localhost地址。