Netty:在messageReceived中获取远程IP地址

13
在我的类中(继承自SimpleChannelHandler),我试图获取消息最初发送的IP地址。
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent ev) throws Exception {
    String host = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getAddress().getHostAddress();
    int port = ((InetSocketAddress)ctx.getChannel().getRemoteAddress()).getPort();
    LOG.debug(String.format("host:%s port:%d", host, port));

    ..

这会输出IP 10.0.0.1(网关),而不是正确的客户端地址(10.52.45.4)。

有没有办法获取我正在尝试的IP地址,或者网络配置可能出了什么问题?


4
在更新后的Netty 4.1.5中,语法略有更新:((InetSocketAddress)ctx.channel().remoteAddress()).getAddress().getHostAddress(); 可以获取远程地址的IP地址。 - Aaron
2个回答

8

我猜你看到网关IP是因为网关进行了某种形式的NAT。如果是这样,你唯一的机会就是在协议中包含源IP地址并从中提取它。


看起来是这样。我决定按照你的建议,在协议中包含源IP(或ID)。谢谢。 - northernd

0

以10.0.0开头的IP地址是内部IP,你可能正在连接同一WiFi路由器上的某个设备。为了获取10.52.45.4 IP地址,你需要在路由器外部连接。(别忘了端口转发)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接