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

2 回答 2

8

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

于 2012-08-09T05:47:41.663 回答
0

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

于 2017-07-04T00:50:48.407 回答