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

标签 java networking ip netty

在我的类(class)(扩展 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,或者网络配置是否有问题?

最佳答案

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

关于java - Netty:在messageReceived中获取远程IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11865165/

相关文章:

java - jasperreports-4.5.1.jar 包含哪些 jar

java - 在 Camel DSL "to"中使用 Exchange 属性

java - JSONObject 在使用字符串实例化后返回非空值 "null"

java - 如何重新打开关闭的套接字以便将消息发送回客户端

algorithm - 提高 Apache Spark 中重叠观察的置信度

java - 防止设备改变ip

java - 自定义 Android LocationListener 问题

c++ - 我如何开始编写自己的类 IP 协议(protocol)?

networking - 使用 IP 地址是否比使用域名更快?

networking - 模拟器联网ip地址和虚拟路由器