获取我的局域网IP地址(192.168.xxxx)(IPV4)

15

我正在尝试查找我的Android设备的IP地址(IPV4)。
如果我执行以下代码:

InetAddress inet = InetAddress.getLocalHost();
System.out.println(inet.getHostAddress()); //giving me 127.0.0.1

我的代码给我返回了127.0.0.1的IP地址。
我想要得到实际的198.168.xx.xx的IP地址。

(但是在我的电脑上,相同的代码却能够给我返回实际的IP地址。)


1
[OT] 抱歉,但隐藏私有IP地址(192.168.xxx?)并不必要,因为知道这些信息的人无法通过此方式入侵您的计算机。 - Luiggi Mendoza
@GrailsGuy 不是重复的问题,OP想要的是192.168本地网络地址,而不是公共路由器地址。 - laalto
@LuiggiMendoza 我知道,我太懒了,没有把那个放在那里。 - Vishnudev K
DigitalRounin的回答对你的目的非常有用。请查看此链接:https://dev59.com/ymQn5IYBdhLWcg3wkH3U#18638588 - Kaaveh Mohamedi
2个回答

25
public static String getIpAddress() { 
            try {
                for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                    NetworkInterface intf = en.nextElement();
                    for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress()&&inetAddress instanceof Inet4Address) {
                            String ipAddress=inetAddress.getHostAddress().toString();
                            Log.e("IP address",""+ipAddress);
                            return ipAddress;
                        }
                    }
                }
            } catch (SocketException ex) {
                Log.e("Socket exception in GetIP Address of Utilities", ex.toString());
            }
            return null; 
    }

给予权限

还需在清单文件中添加。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

感谢您的快速回复。 我得到了"fe80::2064:32ff:fe5d:2edf%p2p0"作为我的地址。 这是IPv6地址吗?如何获取IPv4地址? - Vishnudev K
检查所有接口,给出+1。这将照顾到WiFi和蜂窝网络接口。 - Srikant Sahay
@VishnudevK 这是因为您的路由器已配置为IPv6地址。 - Ayush
@Ayush 但是在手机状态中只显示IPv4地址。 有没有办法将其转换为IPv4? - Vishnudev K
@VishnudevK IPv4和IPv6是两个不同的东西,它们不能相互转换。 - Ayush
显示剩余2条评论

2
你可以使用这个工具获取你的IP地址。
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
return String.format("%d.%d.%d.%d", (ipAddress & 0xff), (ipAddress >> 8 & 0xff),
        (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));

这将以“X.X.X.X”的形式字符串返回它

您在manifest.xml中唯一需要的权限是

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

如果他没有使用WiFi呢? - SJuan76
有没有不使用WiFi获取内部局域网地址的设备示例?例如198.168.xx.xx。以太网端口? - Ken Wolf
通常情况下,我会集中精力在问题的正文部分,而忽略了标题中的数据(这是唯一一个提供“LAN”部分信息的地方)。是的,以太网端口是可能的(尽管我同意现在并不那么常见)。 - SJuan76
我理解。根据我的经验,我发布的代码在Android设备上的生产环境中非常有效,可以完全满足用户的要求。 - Ken Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接