在不连接互联网的情况下获取本地IP地址

因此,我正在尝试获取本地网络中本机的IP地址(应该是192.168.178.41)。

我的初衷是使用这样的东西:

InetAddress.getLocalHost().getHostAddress();

但它只会返回127.0.0.1,这是正确的,但对我却没有太大帮助。

我四处搜索并找到了这个答案http://codingdict.com/questions/121424,它仅创建了Socket到某些网页的-

connection(例如“ google.com”),并从套接字获取了本地主机地址:

Socket s = new Socket("google.com", 80);

System.out.println(s.getLocalAddress().getHostAddress());

s.close();

这确实适用于我的机器(返回192.168.178.41),但需要连接到互联网才能工作。由于我的应用程序不需要互联网连接,并且每次启动应用程序都尝试连接到Google时似乎“可疑”,所以我不喜欢使用它的想法。

因此,在进行了更多研究之后,我偶然发现了NetworkInterface-class,它(也做了一些工作)也返回了所需的IP地址:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();

while (interfaces.hasMoreElements()){

NetworkInterface current = interfaces.nextElement();

System.out.println(current);

if (!current.isUp() || current.isLoopback() || current.isVirtual()) continue;

Enumeration<InetAddress> addresses = current.getInetAddresses();

while (addresses.hasMoreElements()){

InetAddress current_addr = addresses.nextElement();

if (current_addr.isLoopbackAddress()) continue;

System.out.println(current_addr.getHostAddress());

}

}

在我的机器上,这将返回以下内容:

name:eth1 (eth1)

fe80:0:0:0:226:4aff:fe0d:592e%3

192.168.178.41

name:lo (lo)

它会找到我的两个网络接口并返回所需的IP,但是我不确定其他地址(fe80:0:0:0:226:4aff:fe0d:592e%3)的含义。

另外,我还没有找到一种方法来从返回的地址中过滤掉它(通过使用isXX()-object的-

方法InetAddress),然后再使用RegEx,我发现它很“脏”。

除了使用RegEx或互联网之外,还有其他想法吗?

回答:

fe80:0:0:0:226:4aff:fe0d:592e是您的ipv6地址;-)。

使用此检查

if (current_addr instanceof Inet4Address)

System.out.println(current_addr.getHostAddress());

else if (current_addr instanceof Inet6Address)

System.out.println(current_addr.getHostAddress());

如果您只关心IPv4,则只需丢弃IPv6情况。但是请注意,IPv6是未来的^^。

PS:检查您break的某些s是否应该是continues。

以上是 在不连接互联网的情况下获取本地IP地址 的全部内容, 来源链接: utcz.com/qa/414564.html

回到顶部