从HttpServer获取客户端IP

时间:2014-08-12 22:03:07

标签: java

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

2 个答案:

答案 0 :(得分:2)

通常,您可以使用servletRequest.getRemoteAddr()来获取访问您的网络应用的客户端IP地址。但是,如果用户位于代理服务器后面或通过负载均衡器访问您的Web服务器(例如,在云托管中),上面的代码片段将获取代理服务器或负载均衡器服务器的IP地址,而不是原始IP地址客户。

因此,您应该获取请求的HTTP标头“X-Forwarded-For(XFF)”的IP地址

 String ipAddress = request.getHeader("X-FORWARDED-FOR");  
   if (ipAddress == null) {  
       ipAddress = request.getRemoteAddr();  
   }

此代码段取自here,因为解释最佳且无需编辑。 有关更详细的解决方案,您可以参考此question的答案。特别是用户 - basZero。

答案 1 :(得分:-1)

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

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