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

比眉伴天荒 2023-09-26 18:25 217阅读 0赞

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

  1. InetAddress.getLocalHost().getHostAddress();
  2. public static void main(String[] args) {
  3. try {
  4. //用 getLocalHost() 方法创建的InetAddress的对象
  5. InetAddress address = InetAddress.getLocalHost();
  6. System.out.println(address.getHostName());//主机名
  7. System.out.println(address.getCanonicalHostName());//主机别名
  8. System.out.println(address.getHostAddress());//获取IP地址
  9. System.out.println("===============");
  10. //用域名创建 InetAddress对象
  11. InetAddress address1 = InetAddress.getByName("www.wodexiangce.cn");
  12. //获取的是该网站的ip地址,如果我们所有的请求都通过nginx的,所以这里获取到的其实是nginx服务器的IP地址
  13. System.out.println(address1.getHostName());//www.wodexiangce.cn
  14. System.out.println(address1.getCanonicalHostName());//124.237.121.122
  15. System.out.println(address1.getHostAddress());//124.237.121.122
  16. System.out.println("===============");
  17. //用IP地址创建InetAddress对象
  18. InetAddress address2 = InetAddress.getByName("220.181.111.188");
  19. System.out.println(address2.getHostName());//220.181.111.188
  20. System.out.println(address2.getCanonicalHostName());//220.181.111.188
  21. System.out.println(address2.getHostAddress());//220.181.111.188
  22. System.out.println("===============");
  23. //根据主机名返回其可能的所有InetAddress对象
  24. InetAddress[] addresses = InetAddress.getAllByName("www.baidu.com");
  25. for (InetAddress addr : addresses) {
  26. System.out.println(addr);
  27. //www.baidu.com/220.181.111.188
  28. //www.baidu.com/220.181.112.244
  29. }
  30. } catch (UnknownHostException e) {
  31. e.printStackTrace();
  32. }
  33. }

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

  1.  /**
  2. * 获取服务器IP地址
  3. * @return
  4. */
  5. @SuppressWarnings("unchecked")
  6. public static String getServerIp(){
  7. String SERVER_IP = null;
  8. try {
  9. Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
  10. InetAddress ip = null;
  11. while (netInterfaces.hasMoreElements()) {
  12. NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
  13. ip = (InetAddress) ni.getInetAddresses().nextElement();
  14. SERVER_IP = ip.getHostAddress();
  15. if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()
  16. && ip.getHostAddress().indexOf(":") == -1) {
  17. SERVER_IP = ip.getHostAddress();
  18. break;
  19. } else {
  20. ip = null;
  21. }
  22. }
  23. } catch (SocketException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }
  27. return SERVER_IP;
  28. }

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

在nacos的配置里面新建一个

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

发表评论

表情:
评论列表 (有 0 条评论,217人围观)

还没有评论,来说两句吧...

相关阅读

    相关 获取当前服务器ip地址

    一、场景 老项目有多个实例,有个定时任务需要限制只在一台机器上执行,选择在代码里限制机器执行的ip,不满足指定的ip就不执行。也有其它的方法,如设置开关、分布式的任务调度