java获取本机IP

如果您在Windows环境中:请使用InetAddress.getLocalHost()方法。[en]If you are in a windows environment: use the InetAddress.getLocalHost () method.

import java.net.InetAddress;public class Main {   public static void main(String[] args)    throws Exception {      InetAddress addr = InetAddress.getLocalHost();      System.out.println("Local HostAddress:       "+addr.getHostAddress());      String hostname = addr.getHostName();      System.out.println("Local host name: "+hostname);   }}

运行代码的结果是:[en]The result of running the code:

Local HostAddress: 192.168.42.2Local host name: f19ca2b695da

在linux下上述获取IP的方式有时候会得到127.0.0.1.

从JDK1.4开始,Java提供了一个NetworkInterface类。这个类可以得到本机所有的物理网络接口和虚拟机等软件利用本机的物理网络接口创建的逻辑网络接口的信息,NetworkInterface可以通过getNetworkInterfaces方法来枚举本机所有的网络接口。我们也可以利用getNetworkInterfaces得到的网络接口来枚举本机的所有IP地址。当然,也可以通过InetAddress类的getAllByName来得到本机的所有IP地址:

public static Enumeration getNetworkInterfaces() throws SocketException

但getNetworkInterfaces方法可以按网络接口将这些IP地址进行分组,这对于只想得到某个网络接口上的所有IP地址是非常有用的。NetworkInterface类提供了三个方法可以分别得到网络接口名(getName方法)、网络接口别名(getDisplayName方法)以及和网络接口绑定的所有IP地址(getInetAddresses方法):

  1. getName 方法

此方法用于获取网络接口的名称。此名称是使用getByName方法创建网络接口对象时使用的网络接口的名称,如eth0、ppp0等。GetName方法定义如下:[en]This method is used to get the name of a network interface. This name is the name of the network interface used when creating NetworkInterface objects using the getByName method, such as eth0, ppp0, and so on. The getName method is defined as follows:

public String getName()
  1. getDisplayName 方法

此方法可以获得更易于理解的网络接口名称,或者您可以将此网络接口名称用作网络接口别名。在某些操作系统(如Unix)中,getDisplayName方法和getName方法返回相同的值,但在Windows中,getDisplayName方法通常返回更友好的名称,如Realtek RTL8139系列PCI快速以太网卡。GetDisplayName方法定义如下:[en]This method can get a more understandable network interface name, or you can use this network interface name as a network interface alias. In some operating systems (such as Unix), the getDisplayName method and the getName method return the same value, but in Windows the getDisplayName method generally returns a more friendly name, such as Realtek RTL8139 Family PCI Fast Ethernet NIC. The getDisplayName method is defined as follows:

public String getDisplayName()
  1. getInetAddresses 方法

NetworkInterface 类可以通过getInetAddresse 方法以InetAddress 对象的形式返回和网络接口绑定的所有IP 地址。getInetAddresses 方法的定义如下:

public Enumeration getInetAddresses()

以下是WINDOWS和Linux下获取本机IP的一般方法:[en]The following is a general method to obtain native IP under windows and linux:

import java.net.Inet4Address;import java.net.InetAddress;import java.net.NetworkInterface;import java.util.Enumeration;public class Main {  public static void main(String[] args) {        System.out.println("本机IP:" + getIpAddress());   }   public static String getIpAddress() {       try {         Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();         InetAddress ip = null;          while (allNetInterfaces.hasMoreElements()) {          NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();          if (netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp()) {              continue;         } else {              Enumeration addresses = netInterface.getInetAddresses();            while (addresses.hasMoreElements()) {             ip = addresses.nextElement();               if (ip != null && ip instanceof Inet4Address) {               return ip.getHostAddress();               }             }         }         }     } catch (Exception e) {         System.err.println("IP地址获取失败" + e.toString());      }       return "";    }}

表示网络接口已过滤,不是环回接口,不是虚拟网卡并且正在使用[en]Indicates that the network interface is filtered, is not a loopback interface, is not a virtual network card and is in use

netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp() 用于排除回送接口,非虚拟网卡,未在使用中的网络接口.

本文指的是:[en]This article refers to:

原文地址:https://blog.csdn.net/nianbingsihan/article/details/80265029

Original: https://www.cnblogs.com/jpfss/p/12192814.html
Author: 星朝
Title: java获取本机IP

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6137/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总