2012-08-08 13 views
10

मेरी कक्षा में (सरल चैनेल हैंडलर बढ़ाता है) मैं आईपी प्राप्त करने की कोशिश कर रहा हूं जहां संदेश मूल रूप से भेजा गया था।नेटटी: संदेश में रिमोट आईपी पता प्राप्त करना

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

    .. 

यह सही क्लाइंट पता (10.52.45.4) के बजाय आईपी 10.0.0.1 (गेटवे) प्रिंट करता है।

क्या आईपी प्राप्त करने का कोई तरीका है या मैं नेटवर्क कॉन्फ़िगरेशन में कुछ गलत कर सकता हूं?

+3

नई नेटटी 4.1.5 '((इनसेट सॉकेट एड्रेस) ctx.channel()। दूरस्थ एड्रेस()) के साथ वाक्यविन्यास में बस थोड़ा सा अपडेट। getAddress()। getHostAddress();' – Aaron

उत्तर

4

मुझे लगता है कि आप गेटवे आईपी देखते हैं क्योंकि गेटवे किसी प्रकार का एनएटी करता है। यदि ऐसा है, तो आपके पास प्रोटोकॉल में स्रोत-आईपी पता शामिल करने और वहां से निकालने का एकमात्र मौका है।

+0

ऐसा लगता है कि यह मामला है। मैंने तय किया कि प्रोटोकॉल में स्रोत-आईपी (या इस मामले में आईडी) का सुझाव दिया गया है और इसमें शामिल होना बेहतर है। धन्यवाद। – northernd

0

10.0.0 से शुरू होने वाले आईपी पते आंतरिक हैं, तो आप शायद इसे उसी WiFi राउटर पर कनेक्ट कर रहे हैं। 10.52.45.4 आईपी प्राप्त करने के लिए, आपको अपने राउटर से बाहर कनेक्ट करना होगा। (आगे पोर्ट बंद करना न भूलें)

संबंधित मुद्दे