我需要知道客户端的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?
答案 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,则可能存在一些权限问题。