2012-08-08 43 views
10

Trong lớp học của tôi (mở rộng SimpleChannelHandler) Tôi đang cố gắng để có được ip nơi tin nhắn ban đầu được gửi từ.Netty: nhận địa chỉ ip từ xa trong messageReceived

@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)); 

    .. 

Điều này in ip 10.0.0.1 (cổng), thay vì địa chỉ khách hàng chính xác (10.52.45.4).

Có cách nào để nhận được ip tôi đang cố gắng hoặc có thể có điều gì đó sai với cấu hình mạng không?

+3

Chỉ cần cập nhật nhẹ trong cú pháp với mới hơn netty 4.1.5 '((InetSocketAddress) ctx.channel(). remoteAddress()). getAddress(). getHostAddress();' – Aaron

Trả lời

4

Tôi đoán bạn sẽ thấy cổng ip vì gateway thực hiện một số loại NAT. Nếu vậy, cơ hội duy nhất bạn có là bao gồm địa chỉ nguồn-ip trong giao thức của bạn và giải nén nó từ đó.

+0

Điều đó có vẻ như vậy. Tôi quyết định nó tốt hơn để làm như bạn đề nghị và bao gồm các nguồn-ip (hoặc id trong trường hợp này) trong giao thức. Cảm ơn. – northernd

0

Địa chỉ IP bắt đầu bằng 10.0.0 là nội bộ, có thể bạn đang kết nối nó với một thứ gì đó trên cùng một bộ định tuyến WiFi. Để nhận được 10.52.45.4 ip, bạn phải kết nối bên ngoài bộ định tuyến của mình. (đừng quên chuyển tiếp)

Các vấn đề liên quan