java - आईपी पता कैसे पिंग करें




ping host (8)

InetAddress हमेशा सही मूल्य वापस नहीं आता है। यह स्थानीय होस्ट के मामले में सफल है लेकिन अन्य होस्टों के लिए यह दिखाता है कि मेजबान पहुंच योग्य नहीं है। नीचे दिए गए अनुसार पिंग कमांड का उपयोग करने का प्रयास करें।

try {
    String cmd = "cmd /C ping -n 1 " + ip + " | find \"TTL\"";        
    Process myProcess = Runtime.getRuntime().exec(cmd);
    myProcess.waitFor();

    if(myProcess.exitValue() == 0) {

    return true;
    }
    else {
        return false;
    }
}
catch (Exception e) {
    e.printStackTrace();
    return false;
}

मैं जावा में आईपी एड्रेस पिंग करने के लिए कोड के इस हिस्से का उपयोग कर रहा हूं लेकिन केवल स्थानीयहोस्ट पिंगिंग सफल है और अन्य होस्ट्स के लिए प्रोग्राम कहता है कि मेजबान पहुंच योग्य नहीं है। मैंने अपनी फ़ायरवॉल को अक्षम कर दिया लेकिन अभी भी यह समस्या है

public static void main(String[] args) throws UnknownHostException, IOException {
    String ipAddress = "127.0.0.1";
    InetAddress inet = InetAddress.getByName(ipAddress);

    System.out.println("Sending Ping Request to " + ipAddress);
    System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");

    ipAddress = "173.194.32.38";
    inet = InetAddress.getByName(ipAddress);

    System.out.println("Sending Ping Request to " + ipAddress);
    System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");
}

आउटपुट है:

127.0.0.1 को पिंग अनुरोध भेज रहा है
मेजबान पहुंच योग्य है
173.194.32.38 को पिंग अनुरोध भेज रहा है
होस्ट पहुंच योग्य नहीं है


अपनी कनेक्टिविटी की जांच करें। मेरे कंप्यूटर पर यह प्रिंट दोनों आईपी के लिए पहुंच योग्य:

127.0.0.1 को पिंग अनुरोध भेज रहा है
मेजबान पहुंच योग्य है
173.194.32.38 को पिंग अनुरोध भेज रहा है
मेजबान पहुंच योग्य है

संपादित करें:

पता प्राप्त करने के लिए getByAddress () का उपयोग करने के लिए आप कोड को संशोधित करने का प्रयास कर सकते हैं:

public static void main(String[] args) throws UnknownHostException, IOException {
    InetAddress inet;

    inet = InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 });
    System.out.println("Sending Ping Request to " + inet);
    System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");

    inet = InetAddress.getByAddress(new byte[] { (byte) 173, (byte) 194, 32, 38 });
    System.out.println("Sending Ping Request to " + inet);
    System.out.println(inet.isReachable(5000) ? "Host is reachable" : "Host is NOT reachable");
}

GetByName () विधियां किसी प्रकार की रिवर्स DNS लुकअप का प्रयास कर सकती हैं जो आपकी मशीन पर संभव नहीं हो सकती है, getByAddress () इसे बाईपास कर सकता है।


आप जावा में बस पिंग नहीं कर सकते क्योंकि यह आईसीएमपी पर निर्भर करता है, जो दुर्भाग्य से जावा में समर्थित नहीं है

http://mindprod.com/jgloss/ping.html

इसके बजाए सॉकेट का प्रयोग करें

आशा करता हूँ की ये काम करेगा


ओरेकल-जेडीके के साथ लिनक्स पर कोड ओपी प्रस्तुत करता है जब रूट रूट और रूट के दौरान आईसीएमपी पोर्ट 7 का उपयोग करता है। दस्तावेज़ के रूप में रूट के रूप में चलाने के दौरान यह वास्तविक आईसीएमपी गूंज अनुरोध करता है।

यदि आप इसे एमएस मशीन पर चला रहे हैं तो आपको आईसीएमपी व्यवहार प्राप्त करने के लिए एप को व्यवस्थापक के रूप में चलाने की आवश्यकता हो सकती है।


मुझे लगता है कि यह कोड आपकी मदद करेगा:

public class PingExample {
    public static void main(String[] args){
        try{
            InetAddress address = InetAddress.getByName("192.168.1.103");
            boolean reachable = address.isReachable(10000);

            System.out.println("Is host reachable? " + reachable);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

यह काम करना चाहिए:

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Pinger {

private static String keyWordTolookFor = "average";

public Pinger() {
    // TODO Auto-generated constructor stub
}


 public static void main(String[] args) {
 //Test the ping method on Windows.
 System.out.println(ping("192.168.0.1")); }


public String ping(String IP) {
    try {
        String line;
        Process p = Runtime.getRuntime().exec("ping -n 1 " + IP);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while (((line = input.readLine()) != null)) {

            if (line.toLowerCase().indexOf(keyWordTolookFor.toLowerCase()) != -1) {

                String delims = "[ ]+";
                String[] tokens = line.split(delims);
                return tokens[tokens.length - 1];
            } 
        }

        input.close();
    } catch (Exception err) {
        err.printStackTrace();
    }
    return "Offline";
}

}


InetAddress.isReachable() javadoc अनुसार:

".. एक सामान्य कार्यान्वयन आईसीएमपी ईसीएचओ अनुरोधों का उपयोग करेगा यदि विशेषाधिकार प्राप्त किया जा सकता है, अन्यथा यह गंतव्य होस्ट के पोर्ट 7 (इको) पर एक टीसीपी कनेक्शन स्थापित करने का प्रयास करेगा .."।

विकल्प # 1 (आईसीएमपी) आमतौर पर प्रशासनिक (root) अधिकारों की आवश्यकता होती है।


Java में एक आईपी पता पिंग करने के लिए यहां एक विधि है जिसे Windows और Unix सिस्टम पर काम करना चाहिए:

import org.apache.commons.lang3.SystemUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class CommandLine
{
    /**
     * @param ipAddress The internet protocol address to ping
     * @return True if the address is responsive, false otherwise
     */
    public static boolean isReachable(String ipAddress) throws IOException
    {
        List<String> command = buildCommand(ipAddress);
        ProcessBuilder processBuilder = new ProcessBuilder(command);
        Process process = processBuilder.start();

        try (BufferedReader standardOutput = new BufferedReader(new InputStreamReader(process.getInputStream())))
        {
            String outputLine;

            while ((outputLine = standardOutput.readLine()) != null)
            {
                // Picks up Windows and Unix unreachable hosts
                if (outputLine.toLowerCase().contains("destination host unreachable"))
                {
                    return false;
                }
            }
        }

        return true;
    }

    private static List<String> buildCommand(String ipAddress)
    {
        List<String> command = new ArrayList<>();
        command.add("ping");

        if (SystemUtils.IS_OS_WINDOWS)
        {
            command.add("-n");
        } else if (SystemUtils.IS_OS_UNIX)
        {
            command.add("-c");
        } else
        {
            throw new UnsupportedOperationException("Unsupported operating system");
        }

        command.add("1");
        command.add(ipAddress);

        return command;
    }
}

अपनी निर्भरताओं में Apache Commons Lang को जोड़ना सुनिश्चित करें।







host