有什么办法可以让客户端的原始IP地址进入服务器吗?我可以使用request.getRemoteAddr(),但我似乎总是得到代理或Web服务器的IP.
我想知道客户端用来连接我的IP地址.无论如何我能得到它吗?
我找到了一些在servlet中获取ip的不同方法.但我不知道哪一个是正确的,为什么.
1:
request.getHeader( "X-Real-IP" )
Run Code Online (Sandbox Code Playgroud)
2:
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) …Run Code Online (Sandbox Code Playgroud) 我需要知道客户端的 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?
我有一个运行REST Web服务的应用程序引擎应用程序.我想从我的Web服务处理的所有请求中提取IP地址.
来自javax.servlet.http.HttpServletRequest我正在尝试提取检查"X-Real-IP"的IP地址,如果为空或"未知",则检查"X-Forwarded-For"标题列表中的第一个ip空或"未知"从request.getRemoteAddr()获取它.
我以为我覆盖了所有的情况,但我仍然得到像10.xxx,或127.0.0.1或未知的IP地址.
我知道应用程序引擎应用程序正在负载均衡器后面运行,实例是动态的,我当然在请求中省略了一个标题,因为我可以在日志中看到原始的IP地址(来自谷歌).
编辑:我正在处理的所有请求都是直接请求服务(没有队列或cron请求).
想知道其他标题要检查吗?
谢谢 .
Tomcat中的HttpServletRequest.getRemoteAddr()返回IPv6格式的IP地址,但我想配置它返回IPv4.
我通过'localhost'访问servlet.如果我通过'127.0.0.1'访问它,则返回IPv4格式的IP地址(请参阅此答案).
环境:
我的LAN连接属性: 已检查IPv6,但如果我将其检查,则它不起作用.
