gpt4 book ai didi

java - 从 NetworkInterface Android 返回内部 IP

转载 作者:行者123 更新时间:2023-11-30 09:13:21 24 4
gpt4 key购买 nike

我正在使用代码获取我的设备正在使用的 IPv4 地址:

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 "";
}

我的 Samsung Galaxy Express 已连接到 WiFi,并且有一张启用了手机的 SIM 卡。

我从上面的代码中得到的 IP 是 10. 地址,这表明手机正在使用手机信号,当我需要它时使用网络上可用的 192. 地址。

有没有办法更改上面的代码以选择 192.(如果可用)?还是手机出了问题?

我尝试过关闭移动网络、进入飞行模式等。

唯一有用的是取出 SIM 卡!!我不能指望用户这样做只是为了获得内部地址吗?

谢谢

最佳答案

我很想知道是否有更好的方法......

但现在,寻找“wlan0”地址。此外,下面的代码将为您过滤掉环回地址。

List<NetworkInterface> interfaces;
try {
interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface ni : interfaces)
{
if ((ni.isLoopback() == false) && ni.isUp() && (ni.getName().equals("wlan0")))
{

// enumerate ip addresses on this network interface (e.g. ni.getInetAddresses()

// return the first one that is is Ipv4

}
}

您应该将上述代码与对 android.net.ConnectivityManager 的调用结合起来以确认您使用的是 wifi。

关于java - 从 NetworkInterface Android 返回内部 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21051445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com