从 HttpServer 获取客户端 IP

5 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());
}
Run Code Online (Sandbox Code Playgroud)

处理程序:

    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:
    }
}
Run Code Online (Sandbox Code Playgroud)

结果: Client ip is: /0:0:0:0:0:0:0:0

为什么我不能得到真正的客户IP?

Mus*_*bir 2

一般情况下你可以使用servletRequest.getRemoteAddr()获取访问您的网络应用程序的客户端\xe2\x80\x99s IP地址。但是,如果用户位于代理服务器后面或通过负载均衡器访问您的 Web 服务器(例如,在云托管中),则上述代码片段将获取代理服务器或负载均衡器服务器的 IP 地址,而不是原始 IP 地址一个客户的。

\n\n

因此,您应该获取请求的 IP 地址\xe2\x80\x99s HTTP 标头 \xe2\x80\x9cX-Forwarded-For (XFF)\xe2\x80\x9c

\n\n
 String ipAddress = request.getHeader("X-FORWARDED-FOR");  \n   if (ipAddress == null) {  \n       ipAddress = request.getRemoteAddr();  \n   }\n
Run Code Online (Sandbox Code Playgroud)\n\n

此代码片段取自此处,因为解释是最好的,无需编辑。\n有关更详细的解决方案,您可以参考此问题的答案的答案。尤其是用户 basZero 的一个。

\n