【问题标题】:Netty: getting remote ip address in messageReceivedNetty:在messageReceived中获取远程IP地址
【发布时间】:2012-08-05 14:25:49
【问题描述】:

在我的班级(扩展 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,还是网络配置有问题?

【问题讨论】:

  • 使用较新的 netty 4.1.5 ((InetSocketAddress )ctx.channel().remoteAddress()).getAddress().getHostAddress();对语法进行了轻微更新

标签: java networking ip netty


【解决方案1】:

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

【讨论】:

  • 好像是这样。我决定最好按照您的建议进行操作,并将源 IP(或本例中的 id)包含在协议中。谢谢。
【解决方案2】:

以 10.0.0 开头的 IP 地址是内部 IP 地址,您可能将它连接到同一个 WiFi 路由器上的某个东西。要获得 10.52.45.4 ip,您必须在路由器外部进行连接。 (不要忘记端口转发)

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2019-04-12
    • 1970-01-01
    • 2012-03-01
    • 2012-03-22
    • 2011-06-13
    相关资源
    最近更新 更多