запретить вывод ping из (усеченного) вывода вместо времени =

предотвращает вывод вывода ping из (truncated) вместо time=##.# ms

Проблема нежелательного формата вывода явно связана с тестом, который я выполняю: определение порога потери пакетов по размеру пакета. Мой вопрос в том, как я могу смотреть время (вместо «усеченного») в любом случае?

Желаемый формат вывода:

user@desktop:~$ ping -c 10 -s 1372 -v hostname.com PING hostname.com (X.X.X.X) 1372(1400) bytes of data. 1380 bytes from hostname.com (X.X.X.X): icmp_req=1 ttl=242 time=82.8 ms 1380 bytes from hostname.com (X.X.X.X): icmp_req=2 ttl=242 time=82.7 ms --- hostname.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 82.826/83.038/83.250/0.212 ms

Нежелательный формат вывода:

user@desktop:~$ ping -c 10 -s 1373 -v hostname.com PING hostname.com (X.X.X.X) 1373(1401) bytes of data. 1376 bytes from hostname.com (X.X.X.X): icmp_req=1 ttl=242 (truncated) 1376 bytes from hostname.com (X.X.X.X): icmp_req=2 ttl=242 (truncated) --- hostname.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 82.997/83.010/83.023/0.013 ms

В интересах полноты, также показывающей прерывистую ошибку.

user@desktop:~$ ping -c 2 -s 1373 -v hostname.com PING hostname.com (X.X.X.X) 1373(1401) bytes of data. From hostname2.com (Y.Y.Y.Y) icmp_seq=1 Frag needed and DF set (mtu = 1400) 1376 bytes from hostname.com (X.X.X.X): icmp_req=2 ttl=242 (truncated) --- hostname.com ping statistics --- 2 packets transmitted, 1 received, +1 errors, 50% packet loss, time 999ms rtt min/avg/max/mdev = 82.937/82.937/82.937/0.000 ms
1
задан 18 September 2017 в 19:59

2 ответа

Я считаю, что это невозможно.

Учитывая мое чтение исходного кода ping, если размер данных меньше, чем отправленный размер данных, он всегда будет печатать это.

Я предполагаю, что время считается недопустимым или бесполезным из-за усечения данных.

Для пояснения: Условным в указанной выше строке является

if (cc < datalen+8) {

cc представляет количество принятых байтов, а datalen - номер, который вы предоставили с опцией -s. Поэтому это проверяет, меньше ли размер ответа (1373 в вашем втором примере).

Еще одна вещь, которую я только заметил, - это время, которое вычисляется в следующем блоке, следующем за тем, который обнаруживает усеченные данные. После строки, которая печатает текст (truncated), функция возвращается, поэтому блок синхронизации никогда не запускается.

Не совсем ответ, решая вашу проблему, а объяснение, почему это невозможно. Ответ на вопрос о том, как не показывать (truncated), заключается в следующем: сделать удаленный узел не усечением пакетов.

1
ответ дан 18 July 2018 в 06:37

Я считаю, что это невозможно.

Учитывая мое чтение исходного кода ping, если размер данных меньше, чем отправленный размер данных, он всегда будет печатать это.

Я предполагаю, что время считается недопустимым или бесполезным из-за усечения данных.

Для пояснения: Условным в указанной выше строке является

if (cc < datalen+8) {

cc представляет количество принятых байтов, а datalen - номер, который вы предоставили с опцией -s. Поэтому это проверяет, меньше ли размер ответа (1373 в вашем втором примере).

Еще одна вещь, которую я только заметил, - это время, которое вычисляется в следующем блоке, следующем за тем, который обнаруживает усеченные данные. После строки, которая печатает текст (truncated), функция возвращается, поэтому блок синхронизации никогда не запускается.

Не совсем ответ, решая вашу проблему, а объяснение, почему это невозможно. Ответ на вопрос о том, как не показывать (truncated), заключается в следующем: сделать удаленный узел не усечением пакетов.

1
ответ дан 24 July 2018 в 18:38
  • 1
    Ссылка на выделенный исходный код очень полезна. Вы объяснили причину как из-за проблемы, описанной в вопросе, поэтому я не думаю, что это заслуживает того, чтобы быть помеченным как ответ. Почему выражение if было записано в программу ping и что означает сокращение? Похоже, что это попытка сохранить пространство выходных линий, а также может быть отменена. – conman253 19 September 2017 в 23:39
  • 2
    Я не думаю, что это имеет какое-либо отношение к выводам в терминале. Я считаю, что это относится к размеру данных обратного пакета, которые усекаются. – mjb2kmn 20 September 2017 в 00:00
  • 3
    «Почему» вы упомянули, что я догадываюсь, говоря «считая недействительным или бесполезным из-за усеченных данных». - Возможно, здесь будет полезен правильный сетевой инженер. – mjb2kmn 20 September 2017 в 00:16
  • 4
    Это хороший ответ. @ conman253 причина была указана mjb2kmn ", если возвращенный размер данных меньше, чем отправленный размер данных, он всегда будет печатать [усеченный] & quot; – thinkmassive 19 January 2018 в 02:17

Другие вопросы по тегам:

Похожие вопросы: