从HttpServer获取客户端IP

我需要知道客户端的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?

通常,您可以使用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(); } 

此片段取自此处 ,因为解释最好,无需编辑。 有关更详细的解决方案,您可以参考此问题的答案。 特别是用户 – basZero。

 InetAddress address = server.getAddress().getAddress(); System.out.println("Client ip is: " + address.getHostAddress()); 

上面的代码应该为您提供地址。 如果IP仍为0,则可能存在一些权限问题。