当前位置: 首页 > 面试题库 >

使用Java获取当前计算机的IP地址

方宁
2023-03-14
问题内容

我正在尝试开发一个系统,其中有不同的节点在不同的系统或同一系统的不同端口上运行。

现在,所有节点都使用目标IP创建一个套接字,该目标IP是称为自举节点的特殊节点的IP。然后,节点创建自己的节点ServerSocket并开始侦听连接。

引导节点维护节点列表,并在查询时返回它们。

现在,我需要的是该节点必须将其IP注册到引导节点。cli.getInetAddress()一旦客户端连接到ServerSocketBootstrapping节点,我就尝试使用该方法,但这没有用。

  1. 我需要客户端注册其PPP IP(如果有);
  2. 否则,LAN IP(如果有);
  3. 否则,它必须使用相同的计算机注册127.0.0.1。

使用代码:

System.out.println(Inet4Address.getLocalHost().getHostAddress());

要么

System.out.println(InetAddress.getLocalHost().getHostAddress());

我的PPP连接IP地址是:117.204.44.192但以上返回我192.168.1.2

编辑

我正在使用以下代码:

Enumeration e = NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements())
{
    NetworkInterface n = (NetworkInterface) e.nextElement();
    Enumeration ee = n.getInetAddresses();
    while (ee.hasMoreElements())
    {
        InetAddress i = (InetAddress) ee.nextElement();
        System.out.println(i.getHostAddress());
    }
}

我可以获取所有与all关联的IP地址NetworkInterface,但是如何区分它们呢?这是我得到的输出:

127.0.0.1
192.168.1.2
192.168.56.1
117.204.44.19

问题答案:
import java.net.DatagramSocket;
import java.net.InetAddress;

try(final DatagramSocket socket = new DatagramSocket()){
  socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
  ip = socket.getLocalAddress().getHostAddress();
}

当存在多个网络接口时,这种方法效果很好。它总是返回首选的出站IP。目的地8.8.8.8不需要是可到达的。

Connect在UDP套接字上具有以下效果:它设置发送/接收的目的地,丢弃来自其他地址的所有数据包,并且-我们使用的是-将套接字转换为“已连接”状态,并设置其适当的字段。这包括根据系统的路由表检查到目的地的路由的存在,并相应地设置本地端点。最后一部分似乎没有正式记录,但看起来像Berkeley套接字API的一个固有特征(UDP“已连接”状态的副作用),可以在Windows和Linux的各个版本和发行版中可靠地工作。

因此,此方法将提供用于连接到指定远程主机的本地地址。没有建立真正的连接,因此指定的远程IP可能无法访问。

编辑:

对于MacOS,你可以执行以下操作:

Socket socket = new Socket();
socket.connect(new InetSocketAddress("google.com", 80));
System.out.println(socket.getLocalAddress());


 类似资料:
  • 问题内容: 我可以用 获取mac地址,但是如果我在离线计算机上使用此代码,它将无法正常工作。 那么,如何获得Mac地址? 问题答案: 在Java 6+中,你可以使用。 请记住,计算机不能有网卡,尤其是嵌入式或虚拟的网卡。它也可以有多个。你可以使用来获取所有网卡的列表。

  • 本文向大家介绍python简单获取本机计算机名和IP地址的方法,包括了python简单获取本机计算机名和IP地址的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python简单获取本机计算机名和IP地址的方法。分享给大家供大家参考。具体实现方法如下: 方法一: 方法二: 希望本文所述对大家的Python程序设计有所帮助。

  • 我希望在连接到wifi网络时,在运行我的应用程序的手机上获取用户的本地IPv4地址。使用以下代码: 我可以得到一些接近IPv4地址的信息,但与命令行中的IPv4地址相比,它并不完全相同。有更好的办法吗?我知道formatIpAddress已被弃用,但在我找到获取IPv4地址的方法之前,我暂时不太担心这个问题。 编辑: 我发现手机wifi设置中的ip地址是我在使用建议的解决方案获取ip地址时得到的。

  • 问题内容: 寻找一种使计算机具有当前外部IP的更好方法…可以正常工作,但宁愿不依赖外部站点来收集信息…我只能使用与Mac OS捆绑在一起的标准Python 2.5.1库X 10.5.x 问题答案: 如果您在获得外部IP的路由器后面,恐怕您别无选择,只能像您一样使用外部服务。如果路由器本身具有某些查询接口,则可以使用它,但是该解决方案将针对特定环境且不可靠。

  • 问题内容: 我想知道是否有一种方法可以用Java获取计算机名称?我已经看到了该功能的几个答案。但是我想知道是否存在不使用网络的方法? (作为一个附带的问题,计算机名称是否仍然只是一个网络事物,因此必须以这种方式进行??) 问题答案: 操作系统的基础DNS(域名系统)库从IP地址 解析 计算机“名称”。跨操作系统没有通用的计算机名称概念,但DNS通常可用。如果尚未配置计算机名称,以便DNS可以解析它

  • 问题内容: 我正在尝试使用Java获取我的Internet IP地址,但是当我的IP地址为192.168.0.xxx时,我一直在获取本地地址(即:127.0.0.1) 我正在使用该行: 这似乎是获取IP地址的标准方法,但这不是我想要的。每个教程都说要使用此行,所以我有些困惑。 有人可以让我知道如何获取正确的IP地址吗? 我在连接到WiFi的设备上运行,但未使用任何电缆。我正在使用ifconfig