1

我需要为对我们的 JBoss Netty 服务器的每个请求记录用户 ip ady's。我想:

MessageEvent e;
e.getChannel().getRemoteAddress();

是正确的答案,但这总是返回 127.0.0.1 并且我需要实际的客户端 IP。来自 Rails,我检查了他们如何从文档中找到 ip:

确定原始 IP 地址。REMOTE_ADDR 是标准的,但如果用户在代理后面会失败。HTTP_CLIENT_IP 和/或 HTTP_X_FORWARDED_FOR 由代理设置,因此如果 REMOTE_ADDR 是代理,请检查这些。HTTP_X_FORWARDED_FOR 在多个链式代理的情况下可能是一个逗号分隔的列表;最后一个不受信任的地址是原始 IP。

那么我应该检查 Netty 中的所有标题还是有更简单的方法?

4

1 回答 1

3

好的,我有答案。使用 ChannelHandlerContext 而不是 MessageEvent 可以解决问题。

SocketAddress remoteAddress = ctx.getChannel().getRemoteAddress();
于 2011-06-29T13:19:59.353 回答