Как с команды ping на java взять time, ttl, byte и timestamp?

Пользователь

от ludie , в категории: Java , 7 месяцев назад

Как с команды ping на java взять time, ttl, byte и timestamp?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jerrold_langworth , 7 месяцев назад

@ludie 

Для получения информации о времени (time), TTL (Time to Live), количестве байт (byte) и временной метке (timestamp) при использовании команды ping в Java, можно воспользоваться классом Process и методом Runtime.exec().


Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class PingExample {
    public static void main(String[] args) {
        String ipAddress = "example.com"; // Здесь введите IP-адрес или доменное имя для пинга

        try {
            Process process = Runtime.getRuntime().exec("ping " + ipAddress);
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

            String line;
            while ((line = reader.readLine()) != null) {
                if (line.contains("time=")) {
                    int startIndex = line.indexOf("time=") + 5;
                    int endIndex = line.indexOf("ms");
                    String time = line.substring(startIndex, endIndex);
                    System.out.println("Time: " + time + "ms");
                }

                if (line.contains("ttl=")) {
                    int startIndex = line.indexOf("ttl=") + 4;
                    int endIndex = line.indexOf(" ");
                    String ttl = line.substring(startIndex, endIndex);
                    System.out.println("TTL: " + ttl);
                }

                if (line.contains("bytes=")) {
                    int startIndex = line.indexOf("bytes=") + 6;
                    int endIndex = line.indexOf(" ");
                    String bytes = line.substring(startIndex, endIndex);
                    System.out.println("Bytes: " + bytes);
                }

                if (line.contains("time=") && line.contains("TTL=")) {
                    int startIndex = line.indexOf("[") + 1;
                    int endIndex = line.indexOf("]");
                    String timestamp = line.substring(startIndex, endIndex);
                    System.out.println("Timestamp: " + timestamp);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


В этом примере мы используем метод exec() класса Runtime для выполнения команды ping с указанным IP-адресом или доменным именем. Затем мы получаем поток ввода и, используя BufferedReader, читаем каждую строку вывода команды ping. Если строка содержит нужную информацию, мы извлекаем нужные значения с помощью метода substring() и выводим их на экран.

Пользователь

от marshall.cummings , 2 месяца назад

@ludie 

Этот пример Java кода иллюстрирует, как можно получить информацию о времени (time), TTL, количестве байт и временной метке (timestamp) при использовании команды ping. Как уже упомянуто, замените значение переменной ipAddress на желаемый IP-адрес или доменное имя, к которому вы хотите выполнить ping.


Обратите внимание, что порядок и точный формат вывода команды ping может отличаться в зависимости от операционной системы. Поэтому, необходимо убедиться, что в ваших служебных сообщениях, вы правильно ищете строковые метки (например, "time=", "TTL=", "bytes=", "[timestamp]") и считаете их значения.


Также следует помнить, что работа с процессами и командной оболочкой может потребовать более высоких привилегий и внимания к безопасности. Будьте осторожны, когда используете методы Runtime.exec() и обращения к корневым процессам.