问题描述
通常,您可以servletRequest.getRemoteAddr()
用来获取正在访问Web应用程序的客户端的IP地址。但是,如果用户位于代理服务器后面或通过负载均衡器访问您的Web服务器(例如,在云托管中),则上述代码段将获取代理服务器或负载均衡器服务器的IP地址,而不是原始IP地址客户。
因此,您应该获得请求的HTTP标头“ X-Forwarded-For(XFF)”的IP地址
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = request.getRemoteAddr();
}
解决方法
我需要知道客户的IP地址,这是我的鳕鱼
public static void main(String[] args) throws Exception {
server = HttpServer.create(new InetSocketAddress(8000),0);
server.createContext("/",new MyHandler());
server.setExecutor(null); // creates a default executor
server.start();
System.out.println("Client ip is: " + server.getAddress().getAddress());
}
处理程序:
public static class MyHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
t.getRemoteAddress().getAddress(); // t is 0:0:0:0:0:0:0:
}
}
结果: Client ip is: /0:0:0:0:0:0:0:0
为什么我无法获得真正的客户IP?