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?
一般情况下你可以使用servletRequest.getRemoteAddr()获取访问您的网络应用程序的客户端\xe2\x80\x99s IP地址。但是,如果用户位于代理服务器后面或通过负载均衡器访问您的 Web 服务器(例如,在云托管中),则上述代码片段将获取代理服务器或负载均衡器服务器的 IP 地址,而不是原始 IP 地址一个客户的。
因此,您应该获取请求的 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 }\nRun Code Online (Sandbox Code Playgroud)\n\n此代码片段取自此处,因为解释是最好的,无需编辑。\n有关更详细的解决方案,您可以参考此问题的答案的答案。尤其是用户 basZero 的一个。
\n| 归档时间: |
|
| 查看次数: |
8038 次 |
| 最近记录: |