Java 获取当前设备的 IP 地址(最新推荐)

 更新时间:2023年06月15日 09:31:24   作者:火焰兔  
Internet 协议 (IP) 地址可以是连接到 TCP/IP 网络的每个设备的标识符,该标识符用于识别和定位中间通信的节点,这篇文章主要介绍了在 Java 中获取当前设备的 IP 地址,需要的朋友可以参考下

Internet 协议 (IP) 地址可以是连接到 TCP/IP 网络的每个设备的标识符。该标识符用于识别和定位中间通信的节点。

IP 地址格式,例如 127.0.0.0,是一种人类可读的符号。本教程演示如何使用 Java 获取当前机器的 IP 地址。

在 Java 中获取当前设备的系统 IP 地址

IP 地址有两个主要功能:本地寻址和主机或网络接口识别。让我们尝试在 Java 中获取当前设备的系统 IP 地址。

例子:

package Delfstack;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Get_IPAddress {
    public static void main(String[] args) {
        InetAddress My_IP;
        try {
            My_IP = InetAddress.getLocalHost();
            System.out.println("The IP address of the Current Device is: " + My_IP.getHostAddress());
        }
        catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

输出:

The IP address of the Current Device is: 172.23.96.1

运行代码后,我们获得了编译 Java 代码的当前设备的系统 IP 地址。

Java中获取当前服务器的IP地址

获取ip的第一反应就是:使用InetAddress这个类:方法如下

InetAddress.getLocalHost().getHostAddress();

public static void main(String[] args) {
        try {
            //用 getLocalHost() 方法创建的InetAddress的对象
            InetAddress address = InetAddress.getLocalHost();
            System.out.println(address.getHostName());//主机名
            System.out.println(address.getCanonicalHostName());//主机别名
            System.out.println(address.getHostAddress());//获取IP地址
            System.out.println("===============");
            //用域名创建 InetAddress对象
            InetAddress address1 = InetAddress.getByName("www.wodexiangce.cn");
            //获取的是该网站的ip地址,如果我们所有的请求都通过nginx的,所以这里获取到的其实是nginx服务器的IP地址
            System.out.println(address1.getHostName());//www.wodexiangce.cn
            System.out.println(address1.getCanonicalHostName());//124.237.121.122
            System.out.println(address1.getHostAddress());//124.237.121.122
            System.out.println("===============");
            //用IP地址创建InetAddress对象
            InetAddress address2 = InetAddress.getByName("220.181.111.188");
            System.out.println(address2.getHostName());//220.181.111.188
            System.out.println(address2.getCanonicalHostName());//220.181.111.188
            System.out.println(address2.getHostAddress());//220.181.111.188
            System.out.println("===============");
            //根据主机名返回其可能的所有InetAddress对象
            InetAddress[] addresses = InetAddress.getAllByName("www.baidu.com");
            for (InetAddress addr : addresses) {
                System.out.println(addr);
                //www.baidu.com/220.181.111.188
                //www.baidu.com/220.181.112.244
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

可以知道此时获取到的服务器如果加了代理方式就是获取到代理的地址,一般会使用netty代理转发。

 /**
      * 获取服务器IP地址
      * @return
      */
     @SuppressWarnings("unchecked")
     public static String  getServerIp(){
         String SERVER_IP = null;
         try {
             Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
             InetAddress ip = null;
             while (netInterfaces.hasMoreElements()) {
                 NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
                 ip = (InetAddress) ni.getInetAddresses().nextElement();
                 SERVER_IP = ip.getHostAddress();
                 if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
                         && ip.getHostAddress().indexOf(":") == -1) {
                     SERVER_IP = ip.getHostAddress();
                     break;
                 } else {
                     ip = null;
                 }
             }
         } catch (SocketException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         return SERVER_IP;
     }

我的解决死方法(方法是死的,但是能解决问题^_^)

在nacos的配置里面新建一个

constant.ipHost=服务器的ip

//获取服务器的ip
@Value("${constant.ipHost}")
private String ipHost;

到此这篇关于在 Java 中获取当前设备的 IP 地址的文章就介绍到这了,更多相关java获取当前IP地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 图解JVM内存模型

    图解JVM内存模型

    这篇文章主要介绍了JVM内存模型的相关资料,帮助大家更好的理解和学习Java虚拟机,感兴趣的朋友可以了解详细
    2020-10-10
  • 基于SpringBoot启动类静态资源路径问题

    基于SpringBoot启动类静态资源路径问题

    这篇文章主要介绍了SpringBoot启动类静态资源路径问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring代理对象导致的获取不到原生对象注解的解决

    Spring代理对象导致的获取不到原生对象注解的解决

    本文主要介绍了Spring代理对象导致的获取不到原生对象注解的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • springBoot中myBatisPlus的使用步骤及示例代码

    springBoot中myBatisPlus的使用步骤及示例代码

    MyBatis-Plus 是一个 MyBatis 的增强工具,在 Spring Boot 项目里使用它能极大提升开发效率,下面为你详细介绍在 Spring Boot 中使用 MyBatis-Plus 的步骤以及示例代码,感兴趣的朋友一起看看吧
    2025-03-03
  • Java通过反射访问注解信息的方法示例

    Java通过反射访问注解信息的方法示例

    这篇文章主要介绍了Java通过反射访问注解信息的方法,结合实例形式分析了java基于反射访问类成员方法注解信息的相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • SpringBoot个性化启动Banner设置方法解析

    SpringBoot个性化启动Banner设置方法解析

    这篇文章主要介绍了SpringBoot个性化启动Banner设置方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • java中日期格式化的大坑

    java中日期格式化的大坑

    这篇文章主要介绍了java中日期格式化的大坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Sonar编译问题对应:File [...] can''t be indexed twice.

    Sonar编译问题对应:File [...] can''t be indexed twice.

    今天小编就为大家分享一篇关于Sonar编译问题对应:File [...] can't be indexed twice.,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • java实现的二级联动菜单效果

    java实现的二级联动菜单效果

    这篇文章主要介绍了java实现的二级联动菜单效果,结合实例形式分析了java前台页面布局及与后台交互构造联动菜单的相关技巧,需要的朋友可以参考下
    2016-08-08
  • Mybatis-Plus注入SQL原理分析

    Mybatis-Plus注入SQL原理分析

    本文主要介绍了Mybatis-Plus注入SQL原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论