首页 > 编程语言 >java获取服务器ip地址的工具类

java获取服务器ip地址的工具类

时间:2023-06-11 22:55:38浏览次数:48  
标签:return String ip contains 服务器 java ipaddress public

参考:
https://www.cnblogs.com/raphael5200/p/5996464.html
代码实现


import lombok.extern.slf4j.Slf4j;

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

@Slf4j
public class IpUtil {
    public static final String DEFAULT_IP = "127.0.0.1";

    /**
     * 直接根据第一个网卡地址作为其内网ipv4地址,避免返回 127.0.0.1
     *
     * @return
     */
    public static String getLocalIpByNetcard() {
        try {
            for (Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements(); ) {
                NetworkInterface item = e.nextElement();
                for (InterfaceAddress address : item.getInterfaceAddresses()) {
                    if (item.isLoopback() || !item.isUp()) {
                        continue;
                    }
                    if (address.getAddress() instanceof Inet4Address) {
                        Inet4Address inet4Address = (Inet4Address) address.getAddress();
                        return inet4Address.getHostAddress();
                    }
                }
            }
            return InetAddress.getLocalHost().getHostAddress();
        } catch (SocketException | UnknownHostException e) {
            log.info("获取ip异常");
            return DEFAULT_IP;
        }
    }

    public static String getLocalIP() {
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
    }

    public static String getLinuxLocalIp() {
        String ip = "";
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                String name = intf.getName();
                if (!name.contains("docker") && !name.contains("lo")) {
                    for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                        InetAddress inetAddress = enumIpAddr.nextElement();
                        if (!inetAddress.isLoopbackAddress()) {
                            String ipaddress = inetAddress.getHostAddress().toString();
                            if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {
                                ip = ipaddress;
                            }
                        }
                    }
                }
            }
        } catch (SocketException ex) {
            log.info("获取ip异常",ex);
            ip = getLocalIpByNetcard();
        }
        return ip;
    }
}

标签:return,String,ip,contains,服务器,java,ipaddress,public
From: https://www.cnblogs.com/cgy1995/p/17473808.html

相关文章

  • java——微服务——spring cloud——Nacos——Nacos微服务配置拉取
       添加依赖:     添加bootstrap.yml文件    去除application.yml中和bootstrap.yaml中相同的配置项:      修改controller,验证配置更新功能            ......
  • Java11 Optional
    简介publicfinalclassOptional<T>{privatestaticfinalOptional<?>EMPTY=newOptional<>();privatefinalTvalue;privateOptional(){this.value=null;}……}Optional<T>是个容器,在java.util包中用......
  • Java反序列化之Commons-Collection篇04-CC4链
    <1>环境分析因为CommonsCollections4除4.0的其他版本去掉了InvokerTransformer不再继承Serializable,导致无法序列化。同时CommonsCollections4的版本TransformingComparator继承了Serializable接口,而CommonsCollections3里是没有的。这个就提供了一个攻击的路径jd......
  • IP地址解析DNS
    IP地址解析DNS背景指定IP解析域名,查看解析的域名,常用作CDN地址解析查询是否生效。本文章给出几个解决方案的shell脚本#!/bin/bash##****************************************************************************************#Author:wei#**************......
  • java——微服务——spring cloud——Nacos——Nacos实现配置管理
        注意:只填写需要修改的,不是把配置文件全部复制进去                      ......
  • Java用命令行给main方法传参
    Java用命令行给main方法传参1.cd到当前程序的src路径下。2.编译文件,我的文件是在com.test包下。javaccom/test/Demo.java3.给main方法传值。javacom/test/Demo.java123Dowhatyouthinkisright做你认为正确的事......
  • 网安--信息收集(ip信息收集)
    CDN定义:判断CDN1、多地ping站长工具itdog2、查询域名解析地址nslookup如何绕过CDN1、通过域名解析记录https://viewdns.infohttps://site.ip138.comhttps://x.threatbook.cn2、通过空间安全搜索引擎fofahttps://fofa.infoIP:ip=""域名 titletitle=""&&title=""......
  • JavaSE笔记
    Markdown学习标题:二级标题三级标题四级标题字体粗体斜体斜体加粗删除线引用学习markdown分割线图片超链接陈伟强的博客列表abcabc表格名字性别生日陈伟强男2002代码publicwindows常用快捷键ctrl+C:复制ctrl+V:粘贴ctrl+A:全......
  • Java包装类
    包装类 其实就是其实就是8种基本数据类型对应的引用类型。 为什么提供包装类?1、java为了实现一切皆对象,为8种基本类型提供了对应的引用类型2、后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。自......
  • 【技术积累】Java中的泛型【一】
    泛型是什么Java中的泛型是一种能够让用户在编写代码时避免使用明确的类型而进行类型参数化的机制。Java中的泛型可以让编程者在代码编写时不必关心具体类型,只用关心类型之间的关系和相互转换,从而在编写代码的过程中实现类型的复用。这使得代码更加简洁、可读性更高,并且可以提高代......