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

时间:2012-08-08 13:06:20

标签: java networking ip netty

在我的类中(扩展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我试图或者网络配置有问题?

2 个答案:

答案 0 :(得分:5)

我猜你看到了网关ip,因为网关做了某种NAT。如果是这样,你唯一的机会就是在你的协议中包含source-ip地址并从那里提取它。

答案 1 :(得分:0)

从10.0.0开始的IP地址是内置的,您可能将其连接到同一WiFi路由器上的某些内容。要获得10.52.45.4 ip,您必须连接到路由器外部。 (别忘了向前移动)