Netty:获取消息中的远程 IP 地址已接收

2022-09-04 22:36:48

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


答案 1

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


答案 2

以10.0.0开头的IP地址是内部的,您可能将其连接到同一WiFi路由器上的某些内容。要获取10.52.45.4 ip,您必须在路由器外部进行连接。(不要忘记向前移植)