Java获取IP工具类以及使用

工具类

package org.test.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import javax.servlet.http.HttpServletRequest;

public class GetIpAddress {

	/**
     * 获取客户端ip地址(可以穿透代理)
     * 
     * @param request
     * @return
     */
    public static String getRemoteAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
    private static final String[] HEADERS_TO_TRY = { 
        "X-Forwarded-For",
        "Proxy-Client-IP",
        "WL-Proxy-Client-IP",
        "HTTP_X_FORWARDED_FOR",
        "HTTP_X_FORWARDED",
        "HTTP_X_CLUSTER_CLIENT_IP",
        "HTTP_CLIENT_IP",
        "HTTP_FORWARDED_FOR",
        "HTTP_FORWARDED",
        "HTTP_VIA",
        "REMOTE_ADDR",
        "X-Real-IP"};
 
    /***
     * 获取客户端ip地址(可以穿透代理)
     * @param request
     * @return
     */
    public static String getClientIpAddress(HttpServletRequest request) {
        for (String header : HEADERS_TO_TRY) {
            String ip = request.getHeader(header);
            if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
                return ip;
            }
        }
        return request.getRemoteAddr();
    }
    /***
     * 获取客户端ip地址(可以穿透代理)
     * @param request
     * @return
     */
    public static String getClientIpAddr(HttpServletRequest request) {  
        String ip = request.getHeader("X-Forwarded-For");  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("Proxy-Client-IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("WL-Proxy-Client-IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_X_FORWARDED");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_CLIENT_IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_FORWARDED_FOR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_FORWARDED");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_VIA");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("REMOTE_ADDR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getRemoteAddr();  
        }  
        return ip;  
    }
    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("X-Real-IP");
        if (null != ip && !"".equals(ip.trim())
                && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
        ip = request.getHeader("X-Forwarded-For");
        if (null != ip && !"".equals(ip.trim())
                && !"unknown".equalsIgnoreCase(ip)) {
            // get first ip from proxy ip
            int index = ip.indexOf(',');
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        }
        return request.getRemoteAddr();
	}
}

使用介绍

请求时获取
在controller中获取

public String getIp(HttpServletRequest request){
 String ipStr = GetIpAddress.getClientIpAddress(request);
 //打印IP
 System.out.println(ipStr )
}

已经登录后使用

 HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
 String ipStr = GetIpAddress.getClientIpAddress(request);
 //打印IP
 System.out.println(ipStr )
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Java中的Socket类来获取服务端的IP地址和端口号。以下是一个简单的工具类示例: ```java import java.net.InetAddress; import java.net.Socket; public class ServiceInfoUtil { /** * 获取服务端IP地址和端口号 * @param hostname 服务端主机名 * @param port 服务端端口号 * @return 包含服务端IP地址和端口号的字符串 */ public static String getServiceInfo(String hostname, int port) { try { // 创建socket并连接到服务端 Socket socket = new Socket(hostname, port); // 获取服务端的IP地址和端口号 InetAddress address = socket.getInetAddress(); int serverPort = socket.getPort(); // 关闭socket socket.close(); // 返回包含服务端IP地址和端口号的字符串 return "Service running at: " + address.getHostAddress() + ":" + serverPort; } catch (Exception e) { // 如果连接失败则返回null return null; } } } ``` 使用示例: ```java String serviceInfo = ServiceInfoUtil.getServiceInfo("localhost", 8080); if (serviceInfo != null) { System.out.println(serviceInfo); } else { System.out.println("Failed to connect to service."); } ``` 在上面的示例中,我们通过调用`getServiceInfo`方法来获取`localhost:8080`服务的IP地址和端口号。如果连接成功,则返回包含服务端IP地址和端口号的字符串,否则返回null。 ### 回答2: 在Java中编写一个获取服务IP端口的工具类,可以使用Java的Socket类进行实现。 首先,我们需要创建一个名为"ServerUtils"的工具类。在这个工具类中,我们可以定义一个静态方法,用于获取指定服务的IP和端口。下面是具体的实现步骤: 1. 导入必要的Java包: ```java import java.net.InetSocketAddress; import java.net.Socket; ``` 2. 定义静态方法"getServerIPAndPort",该方法接受两个参数:服务的主机名和端口号,并返回一个包含IP和端口的字符串数组: ```java public class ServerUtils { public static String[] getServerIPAndPort(String hostname, int port) { String[] results = new String[2]; try { Socket socket = new Socket(); socket.connect(new InetSocketAddress(hostname, port)); results[0] = socket.getLocalAddress().getHostAddress(); // 获取本地IP results[1] = String.valueOf(socket.getLocalPort()); // 获取本地端口 socket.close(); } catch (Exception e) { e.printStackTrace(); } return results; } } ``` 3. 调用这个方法来获取服务的IP和端口,示例代码如下: ```java public class Main { public static void main(String[] args) { String hostname = "localhost"; // 服务主机名 int port = 8080; // 服务端口 // 调用获取IP和端口的方法 String[] ipAndPort = ServerUtils.getServerIPAndPort(hostname, port); if (ipAndPort[0] != null && ipAndPort[1] != null) { System.out.println("服务IP地址:" + ipAndPort[0]); System.out.println("服务端口号:" + ipAndPort[1]); } else { System.out.println("无法获取服务的IP和端口。"); } } } ``` 以上就是使用Java编写一个获取服务IP和端口的工具类的步骤。可以根据实际的服务主机名和端口号来调用这个工具类,获取对应的IP和端口信息。 ### 回答3: 下面是一个用Java编写的获取服务IP端口的工具类: ```java import java.net.InetAddress; import java.net.Socket; public class ServiceUtils { public static String getServiceIP(String hostname) { try { InetAddress address = InetAddress.getByName(hostname); return address.getHostAddress(); } catch (Exception e) { e.printStackTrace(); } return null; } public static int getServicePort(String hostname, int port) { try { Socket socket = new Socket(hostname, port); int servicePort = socket.getLocalPort(); socket.close(); return servicePort; } catch (Exception e) { e.printStackTrace(); } return -1; } public static void main(String[] args) { String hostname = "example.com"; // 服务主机名 int port = 80; // 服务端口号 String serviceIP = getServiceIP(hostname); int servicePort = getServicePort(hostname, port); System.out.println("服务IP:" + serviceIP); System.out.println("服务端口:" + servicePort); } } ``` 以上是一个基于Java工具类,可以通过提供服务的主机名和端口号来获取服务的IP地址和端口。其中,`getServiceIP`方法通过主机名获取对应的IP地址,`getServicePort`方法通过主机名和端口号获取服务的端口号。在`main`方法中,可以通过调用这两个方法来获取服务的IP和端口,并打印输出。请根据实际需求修改`hostname`和`port`的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值