gpt4 book ai didi

java - 在java中没有获得IP地址

转载 作者:IT老高 更新时间:2023-10-28 20:51:23 25 4
gpt4 key购买 nike

此代码用于将我的本地 IP 地址返回为 192.xxx.x.xxx 但现在它返回 127.0.0.1 。请帮助我为什么相同的代码返回不同的值。有什么我需要在 linux OS 上观看的。

import java.util.*;
import java.lang.*;
import java.net.*;

public class GetOwnIP
{
public static void main(String args[]) {
try{
InetAddress ownIP=InetAddress.getLocalHost();
System.out.println("IP of my system is := "+ownIP.getHostAddress());
}catch (Exception e){
System.out.println("Exception caught ="+e.getMessage());
}
}
}

最佳答案

127.0.0.1 是环回适配器 - 这是对“我的 IP 地址是什么?”(有点畸形)问题的完全正确的回答

问题在于该问题有多个正确答案。

编辑:getLocalHost 的文档说:

If there is a security manager, its checkConnect method is called with the local host name and -1 as its arguments to see if the operation is allowed. If the operation is not allowed, an InetAddress representing the loopback address is returned.

行为的改变是否可能是由于权限的改变?

编辑:我相信 NetworkInterface.getNetworkInterfaces是您需要枚举所有可能性的内容。这是一个不显示虚拟地址但适用于“主”接口(interface)的示例:

import java.net.*;
import java.util.*;

public class Test
{
public static void main(String[] args)
throws Exception // Just for simplicity
{
for (Enumeration<NetworkInterface> ifaces =
NetworkInterface.getNetworkInterfaces();
ifaces.hasMoreElements(); )
{
NetworkInterface iface = ifaces.nextElement();
System.out.println(iface.getName() + ":");
for (Enumeration<InetAddress> addresses =
iface.getInetAddresses();
addresses.hasMoreElements(); )
{
InetAddress address = addresses.nextElement();
System.out.println(" " + address);
}
}
}
}

(我忘记了直接使用 Enumeration<T> 类型有多糟糕!)

这是我笔记本电脑上的结果:

lo:
/127.0.0.1
eth0:
/169.254.148.66
eth1:
eth2:
ppp0:
/10.54.251.111

(我认为这不会泄露任何大量敏感信息:)

如果您知道要使用哪个网络接口(interface),请调用 NetworkInterface.getByName(...)然后查看该接口(interface)的地址(如上面的代码所示)。

关于java - 在java中没有获得IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1062041/

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