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




ping host (10)

यह निश्चित रूप से काम करेगा

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

public class JavaPingExampleProgram
{

  public static void main(String args[]) 
  throws IOException
  {
    // create the ping command as a list of strings
    JavaPingExampleProgram ping = new JavaPingExampleProgram();
    List<String> commands = new ArrayList<String>();
    commands.add("ping");
    commands.add("-c");
    commands.add("5");
    commands.add("74.125.236.73");
    ping.doCommand(commands);
  }

  public void doCommand(List<String> command) 
  throws IOException
  {
    String s = null;

    ProcessBuilder pb = new ProcessBuilder(command);
    Process process = pb.start();

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

    // read the output from the command
    System.out.println("Here is the standard output of the command:\n");
    while ((s = stdInput.readLine()) != null)
    {
      System.out.println(s);
    }

    // read any errors from the attempted command
    System.out.println("Here is the standard error of the command (if any):\n");
    while ((s = stdError.readLine()) != null)
    {
      System.out.println(s);
    }
  }

}

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

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 को पिंग अनुरोध भेज रहा है
होस्ट पहुंच योग्य नहीं है


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

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

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

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


आप Windows या अन्य प्लेटफ़ॉर्म पर होस्ट पिंग करने के लिए इस विधि का उपयोग कर सकते हैं:

private static boolean ping(String host) throws IOException, InterruptedException {
    boolean isWindows = System.getProperty("os.name").toLowerCase().contains("win");

    ProcessBuilder processBuilder = new ProcessBuilder("ping", isWindows? "-n" : "-c", "1", host);
    Process proc = processBuilder.start();

    int returnVal = proc.waitFor();
    return returnVal == 0;
}

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;
}


दूसरों ने जो कुछ दिया है, उसके अलावा सिर्फ एक जोड़ा, भले ही वे अच्छी तरह से काम करते हैं लेकिन कुछ मामलों में यदि इंटरनेट धीमा है या कुछ अज्ञात नेटवर्क समस्या मौजूद है, तो कुछ कोड काम नहीं करेंगे ( isReachable() )। लेकिन नीचे उल्लिखित यह कोड एक प्रक्रिया बनाता है जो विंडोज़ को कमांड लाइन पिंग (सेमीडी पिंग) के रूप में कार्य करता है। यह सभी मामलों में मेरे लिए काम करता है, कोशिश की और परीक्षण किया।

संहिता: -

public class JavaPingApp {

public static void runSystemCommand(String command) {

    try {
        Process p = Runtime.getRuntime().exec(command);
        BufferedReader inputStream = new BufferedReader(
                new InputStreamReader(p.getInputStream()));

        String s = "";
        // reading output stream of the command
        while ((s = inputStream.readLine()) != null) {
            System.out.println(s);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {

    String ip = ".com"; //Any IP Address on your network / Web
    runSystemCommand("ping " + ip);
}
}

उम्मीद है कि यह मदद करता है, चीयर्स !!!


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 को जोड़ना सुनिश्चित करें।


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

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

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


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

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 () इसे बाईपास कर सकता है।


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

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


मुझे पता है कि पिछली प्रविष्टियों के साथ इसका उत्तर दिया गया है, लेकिन किसी और के लिए जो इस प्रश्न पर आता है, मुझे एक ऐसा तरीका मिला जिसकी खिड़कियों में "पिंग" प्रक्रिया का उपयोग करने और आउटपुट को स्क्रब करने की आवश्यकता नहीं थी।

मैंने आईसीएमपी गूंज करने के लिए विंडो की आईपी सहायक लाइब्रेरी को आमंत्रित करने के लिए जेएनए का उपयोग किया था

अपने स्वयं के इसी मुद्दे पर अपना जवाब देखें





host