предотвращает вывод вывода 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Я считаю, что это невозможно.
Учитывая мое чтение исходного кода ping, если размер данных меньше, чем отправленный размер данных, он всегда будет печатать это.
Я предполагаю, что время считается недопустимым или бесполезным из-за усечения данных.
Для пояснения: Условным в указанной выше строке является
if (cc < datalen+8) {
cc представляет количество принятых байтов, а datalen - номер, который вы предоставили с опцией -s. Поэтому это проверяет, меньше ли размер ответа (1373 в вашем втором примере).
Еще одна вещь, которую я только заметил, - это время, которое вычисляется в следующем блоке, следующем за тем, который обнаруживает усеченные данные. После строки, которая печатает текст (truncated), функция возвращается, поэтому блок синхронизации никогда не запускается.
Не совсем ответ, решая вашу проблему, а объяснение, почему это невозможно. Ответ на вопрос о том, как не показывать (truncated), заключается в следующем: сделать удаленный узел не усечением пакетов.
Я считаю, что это невозможно.
Учитывая мое чтение исходного кода ping, если размер данных меньше, чем отправленный размер данных, он всегда будет печатать это.
Я предполагаю, что время считается недопустимым или бесполезным из-за усечения данных.
Для пояснения: Условным в указанной выше строке является
if (cc < datalen+8) {
cc представляет количество принятых байтов, а datalen - номер, который вы предоставили с опцией -s. Поэтому это проверяет, меньше ли размер ответа (1373 в вашем втором примере).
Еще одна вещь, которую я только заметил, - это время, которое вычисляется в следующем блоке, следующем за тем, который обнаруживает усеченные данные. После строки, которая печатает текст (truncated), функция возвращается, поэтому блок синхронизации никогда не запускается.
Не совсем ответ, решая вашу проблему, а объяснение, почему это невозможно. Ответ на вопрос о том, как не показывать (truncated), заключается в следующем: сделать удаленный узел не усечением пакетов.