मैं जावा में अपने राउटर/गेटवे का आईपी कैसे निर्धारित कर सकता हूं?

मैं जावा में अपने राउटर/गेटवे का आईपी कैसे निर्धारित कर सकता हूं? मैं अपना आईपी आसानी से प्राप्त कर सकता हूं। मैं एक वेबसाइट पर एक सेवा का उपयोग कर अपना इंटरनेट आईपी प्राप्त कर सकते हैं। लेकिन मैं अपने गेटवे के आईपी को कैसे निर्धारित कर सकता हूं?

यदि आप अपने रास्ते को जानते हैं तो यह .NET में कुछ हद तक आसान है। लेकिन आप जावा में यह कैसे करते हैं?

0
ro fr bn
आपके गेटवे/राउटर में वास्तव में (कम से कम) दो आईपी पते हैं। क्या आप किसी ऐसे व्यक्ति की तलाश में हैं जो आपके नोड का सामना कर रहा है या अन्य लोगों को अन्य नेटवर्क की ओर अपस्ट्रीम का सामना करना पड़ रहा है?
जोड़ा लेखक Tall Jeff, स्रोत

13 उत्तर

आप checkmyip.org जैसे कुछ का उपयोग कर बेहतर हो सकते हैं, जो आपके सार्वजनिक आईपी पते को निर्धारित करेगा - जरूरी नहीं कि आपका पहला हॉप राउटर: यूनी में मेरे पास "वास्तविक" आईपी पता है, जबकि घर पर यह मेरा स्थानीय राउटर का सार्वजनिक आईपी पता है।

आप उस पृष्ठ को पार्स कर सकते हैं जो लौटाता है, या दूसरी साइट ढूंढता है जो आपको केवल आईपी एड्रेस को एकमात्र स्ट्रिंग के रूप में प्राप्त करने की अनुमति देता है।

(मेरा मतलब है कि जावा में यह यूआरएल लोड करें/जो भी हो, और फिर आपको जो जानकारी चाहिए उसे प्राप्त करें)।

यह पूरी तरह से मंच स्वतंत्र होना चाहिए।

0
जोड़ा

दुर्भाग्यवश, जावा इसे अन्य भाषाओं के रूप में सुखद नहीं बनाता है। यहां मैंने जो किया है:

import java.io.*;
import java.util.*;

public class ExecTest {
    public static void main(String[] args) throws IOException {
        Process result = Runtime.getRuntime().exec("traceroute -m 1 www.amazon.com");

        BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
        String thisLine = output.readLine();
        StringTokenizer st = new StringTokenizer(thisLine);
        st.nextToken();
        String gateway = st.nextToken();
        System.out.printf("The gateway is %s\n", gateway);
    }
}

यह मानता है कि गेटवे दूसरा टोकन है और तीसरा नहीं है। यदि ऐसा है, तो टोकननाइज़र को एक और स्थान अग्रिम करने के लिए आपको अतिरिक्त st.nextToken (); जोड़ने की आवश्यकता है।

0
जोड़ा
असल में यह विंडोज-ओएस के लिए काम नहीं करता है, क्योंकि ट्रैसरआउट को वहां ट्रैकर्ट कहा जाता है।
जोड़ा लेखक Thorbjørn Ravn Andersen, स्रोत
-1: यह एक गैर विंडोज़ ओएस के लिए काम नहीं करता है।
जोड़ा लेखक Martijn Courteaux, स्रोत

IPConfig के आउटपुट को पार्स करने वाली विंडो पर आपको ट्रेस के इंतजार किए बिना डिफ़ॉल्ट गेटवे मिल जाएगा।

0
जोड़ा

मैथ्यू: हाँ, यही मेरा मतलब है "मैं एक वेबसाइट पर एक सेवा का उपयोग कर अपना इंटरनेट आईपी प्राप्त कर सकता हूं।" ग्लिब होने के बारे में खेद है।

ब्रायन/निक: इस तथ्य को छोड़कर ट्रैसरआउट ठीक रहेगा कि इनमें से बहुत से राउटर में आईसीएमपी अक्षम है और इस प्रकार यह हमेशा स्टाल करता है।

मुझे लगता है कि traceroute और uPnP का संयोजन काम करेगा। यही वह है जो मैं करने की योजना बना रहा था, मुझे उम्मीद है कि मैं कुछ स्पष्ट याद कर रहा था।

आपकी टिप्पणियों के लिए सभी को धन्यवाद, इसलिए ऐसा लगता है कि मुझे कुछ भी याद नहीं आ रहा है। गेटवे की खोज के लिए मैंने यूपीएनपी के कुछ बिट्स को लागू करना शुरू कर दिया है।

0
जोड़ा

विंडोज़, ओएसएक्स, लिनक्स, आदि पर क्रिस बंच का जवाब उपयोग करके काफी सुधार किया जा सकता है

netstat -rn

traceroute कमांड के स्थान पर।

आपका गेटवे का आईपी पता लाइन के दूसरे फ़ील्ड में दिखाई देगा जो या तो default या 0.0.0.0 शुरू होता है।

यह traceroute का उपयोग करने की कोशिश करने के साथ कई समस्याओं को प्राप्त करता है:

  1. on Windows traceroute is actually tracert.exe, so there's no need for O/S dependencies in the code
  2. it's a quick command to run - it gets information from the O/S, not from the network
  3. traceroute is sometimes blocked by the network

केवल नकारात्मक पक्ष यह है कि सही कोड मिलने तक netstat आउटपुट से लाइनों को पढ़ने के लिए आवश्यक होगा, क्योंकि उत्पादन की एक से अधिक पंक्तियां होंगी।

EDIT: The Default Gateway's IP Address is in the second field of the line that starts with 'default' if you are on a MAC (tested on Lion), or in the third field of the line that starts with '0.0.0.0' (tested on Windows 7)

विंडोज:

    

नेटवर्क गंतव्य नेटमास्क गेटवे इंटरफेस मीट्रिक

         

0.0.0.0 0.0.0.0 192.168.2.254 192.168.2.46 10

  

मैक:

    

गंतव्य गेटवे ध्वज रेफरी नेटिफ़ एक्सपेयर का उपयोग करें

         

डिफ़ॉल्ट 192.168.2.254 यूजीएससी 104 4 en1

  
0
जोड़ा

Traceroute (आईसीएमपी आधारित, विस्तृत क्षेत्र हिट) के साथ उल्लिखित मुद्दों को दूर करने के लिए आप विचार कर सकते हैं:

  1. traceroute to your public IP (avoids wide-area hit, but still ICMP)
  2. Use a non-ICMP utility like ifconfig/ipconfig (portability issues with this though).
  3. What seems the best and most portable solution for now is to shell & parse netstat (see the code example here)
0
जोड़ा

आप netstat -rn कमांड का उपयोग कर सकते हैं जो विंडोज, ओएसएक्स, लिनक्स, आदि मंच पर उपलब्ध है। मेरा कोड यहाँ है:

private String getDefaultAddress() {
        String defaultAddress = "";
        try {
            Process result = Runtime.getRuntime().exec("netstat -rn");

            BufferedReader output = new BufferedReader(new InputStreamReader(
                    result.getInputStream()));

            String line = output.readLine();
            while (line != null) {
                if (line.contains("0.0.0.0")) {

                    StringTokenizer stringTokenizer = new StringTokenizer(line);
                    stringTokenizer.nextElement();//first element is 0.0.0.0
                    stringTokenizer.nextElement();//second element is 0.0.0.0
                    defaultAddress = (String) stringTokenizer.nextElement();
                    break;
                }

                line = output.readLine();

            }//while
        } catch (IOException e) {
           //TODO Auto-generated catch block
            e.printStackTrace();
        }

        return defaultAddress;

}//getDefaultAddress
0
जोड़ा

यूपीएनपी के बारे में: ध्यान रखें कि सभी राउटर यूपीएनपी का समर्थन नहीं करते हैं। और अगर वे ऐसा करते हैं तो इसे बंद कर दिया जा सकता है (सुरक्षा कारणों से)। तो आपका समाधान हमेशा काम नहीं कर सकता है।

आपको NatPMP पर भी एक नज़र रखना चाहिए।

UPnP के लिए एक साधारण लाइब्रेरी http://miniupnp.free.fr/ पर मिल सकती है, हालांकि यह अंदर है सी...

0
जोड़ा

यदि आपके पास ट्रैसरआउट में शेलिंग करने का प्रयास करें।

'traceroute -m 1 www.amazon.com' इस तरह कुछ उत्सर्जित करेगा:

traceroute to www.amazon.com (72.21.203.1), 1 hops max, 40 byte packets
 1  10.0.1.1 (10.0.1.1)  0.694 ms  0.445 ms  0.398 ms

दूसरी पंक्ति पार्स करें। हां, यह बदसूरत है, लेकिन यह आपको तब तक ले जाएगा जब तक कि कोई कुछ अच्छा पोस्ट न करे।

0
जोड़ा
डाउनवोट क्यों?
जोड़ा लेखक Rydell, स्रोत

यह उतना आसान नहीं है जितना लगता है। जावा प्लेटफॉर्म स्वतंत्र है, इसलिए मुझे यकीन नहीं है कि जावा में इसे कैसे किया जाए। मैं अनुमान लगा रहा हूं कि .NET कुछ वेबसाइटों से संपर्क करता है जो इसे वापस रिपोर्ट करता है। जाने के कुछ तरीके हैं। सबसे पहले, आईसीएमपी प्रोटोकॉल में गहरी नजर आपको आपको आवश्यक जानकारी दे सकती है। आप जिस आईपी से गुजरते हैं उसका पता लगा सकते हैं (आपका मार्ग)। जब आप एक आईपी का सामना करते हैं जो निम्नलिखित श्रेणियों में नहीं है:

  • 10.0.0.0? 10.255.255.255
  • 172.16.0.0? 172.31.255.255
  • 1 9 2.168.0.0? 192.168.255.255

यह आईपी एक हॉप आपके से दूर है, और शायद आपके आईपी के साथ जानकारी के कुछ ऑक्टेट्स साझा करता है।

शुभकामनाएँ। मैं इस सवाल का एक निश्चित जवाब सुनने के लिए उत्सुक रहूंगा।

0
जोड़ा
try{

    Process result = Runtime.getRuntime().exec("netstat -rn");

    BufferedReader output = new BufferedReader
    (new InputStreamReader(result.getInputStream()));

    String line = output.readLine();
    while(line != null){
    if ( line.startsWith("default") == true )
        break;      
    line = output.readLine();
    }


    StringTokenizer st = new StringTokenizer( line );
    st.nextToken();
    gateway = st.nextToken();

    st.nextToken();
    st.nextToken();
    st.nextToken();

    adapter = st.nextToken();

}catch( Exception e ) { 
    System.out.println( e.toString() );
    gateway = new String();
    adapter = new String();
}
0
जोड़ा
रेखा डिफ़ॉल्ट के बजाय 0.0.0.0 से भी शुरू हो सकती है
जोड़ा लेखक Alex Abdugafarov, स्रोत

यह संस्करण www.whatismyip.com से जुड़ता है, आईपी एड्रेस के नियमित अभिव्यक्तियों के माध्यम से साइट की सामग्री और खोजों को पढ़ता है और इसे cmd पर प्रिंट करता है। MosheElishas कोड का थोड़ा सुधार है

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader; 
import java.net.URL;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class Main {

    public static void main(String[] args) {
        BufferedReader buffer = null;
        try {
            URL url = new URL(
                    "http://www.whatismyip.com/tools/ip-address-lookup.asp");
            InputStreamReader in = new InputStreamReader(url.openStream());
            buffer = new BufferedReader(in);
            String line = buffer.readLine();
            Pattern pattern = Pattern
                    .compile("(.*)value=\"(\\d+).(\\d+).(\\d+).(\\d+)\"(.*)");
            Matcher matcher;
            while (line != null) {
                matcher = pattern.matcher(line);
                if (matcher.matches()) {
                    line = matcher.group(2) + "." + matcher.group(3) + "."
                            + matcher.group(4) + "." + matcher.group(5);
                    System.out.println(line);
                }
                line = buffer.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            try {
                if (buffer != null) {
                    buffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader; 
import java.net.URL;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class Main {

    public static void main(String[] args) {
        BufferedReader buffer = null;
        try {
            URL url = new URL(
                    "http://www.whatismyip.com/tools/ip-address-lookup.asp");
            InputStreamReader in = new InputStreamReader(url.openStream());
            buffer = new BufferedReader(in);
            String line = buffer.readLine();
            Pattern pattern = Pattern
                    .compile("(.*)value=\"(\\d+).(\\d+).(\\d+).(\\d+)\"(.*)");
            Matcher matcher;
            while (line != null) {
                matcher = pattern.matcher(line);
                if (matcher.matches()) {
                    line = matcher.group(2) + "." + matcher.group(3) + "."
                            + matcher.group(4) + "." + matcher.group(5);
                    System.out.println(line);
                }
                line = buffer.readLine();
            }
        } catch (IOException e) {
            e.printStackTrace();

        } finally {
            try {
                if (buffer != null) {
                    buffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
0
जोड़ा

विंडोज़ में आप केवल निम्न कमांड का उपयोग कर सकते हैं:

ipconfig | findstr /i "Gateway"

जो आपको आउटपुट देगा:

Default Gateway . . . . . . . . . : 192.168.2.1
Default Gateway . . . . . . . . . : ::

हालांकि मैं इस आदेश को जावा के साथ नहीं चला सकता, जब मैं इसे समझता हूं तो पोस्ट करता हूं।

0
जोड़ा