2014-09-08 3 views
0

Я ищу сценарий, который может извлечь строку с самым высоким латентным ходом из traceroute. В идеале он будет смотреть на max или avg из 3 значений по строке. Как я могу так это?Сценарий для извлечения максимальной задержки из traceroute

Это то, что я пытался до сих пор:

 traceroute www.google.com | awk '{printf "%s\t%s\n", $2, $3+$4+$5; }' | sort -rgk2 | head -n1 
    traceroute -w10 www.google.com | awk '{printf "%s\t%s\n", $2, ($3+$4+$5)/3; }' | sort -rgk2 | head -n1 

Казалось шаг в правильном направлении, за исключением некоторых значений возвращавшихся из трассировки являются *, так как сумма и среднего обеспечить Неверное значение.

Update Got один шаг дальше:

 traceroute www.cnn.com | awk '{count = 0;sum = 0;for (i=3; i<6; i++){ if ($i != "*") {sum += $i;count++;}}; printf "%s\t%s\t%s\t%s\n", $2, count, sum, sum/count }' | sort -rgk2 

теперь нужно перехватить, если я не»есть столбец 4,5. Иногда трассировка только обеспечивает 3 звезды, как это:

 17 207.88.13.153 235.649ms 234.864ms 239.316ms 
    18 * * * 

ответ

1

Try:

$ traceroute 8.8.8.8 | awk ' BEGIN { FPAT="[0-9]+\\.[0-9]{3} ms" } 
          /[\\* ]{3}/ {next} 
          NR>1 { 
            for (i=1;i<4;i++) {gsub("*","5000.00 ms",$i)} 
            av = (gensub(" ms","",1,$1) + gensub(" ms","",1,$2) + gensub(" ms","",1,$3))/3 
            if (av > worst) { 
            ln = $0 
            worst = av 
            } 
           } 
          ND { print "Highest:", ln, " Average:", worst, "ms"}' 

, который дает:

Highest: 6 72.14.242.166 (72.14.242.166) 7.383 ms 72.14.232.134 (72.14.232.134) 7.865 ms 7.768 ms Average: 7.672 ms 

Если есть три Звездочка (Asteri?) * * * сценарий предполагает, что хмель не реагирует с ответом IGMP и игнорирует его полностью. Если в строке есть один или два *, он дает им значение 5,0 секунд.

+0

Хм - вы делите на 3 во всех случаях, поэтому, если у меня 110,666 мс * 159,334 мс, я бы получил 90 мс, что не было бы точным средним из 135ms – stwissel

+1

Я думаю, что проблема заключается в отсутствии определения для '*'. В своем комментарии вы решили проигнорировать его и разделите на два. Его также можно определить как 5,0 секунд, так как это время, в которое traceroute сдается и показывает астерикс. Его также можно определить как бесконечность, так как никакой ответ не был замечен. В последнем случае вы можете привести более чем к одной строке в качестве ответа наихудшего случая. – garethTheRed

+0

Правда. * не определен. Он появляется, когда запрос истекает. Обычно это происходит, когда сервер настроен на игнорирование traceroute. Я проверил с таймаутом 30 секунд и все еще получил *. Поэтому я пришел к выводу, что игнорирование так же хорошо, как и предполагаемое значение (где тайм-аут - по умолчанию 3 сек.) Было бы подходящим) Awk все равно превращает его в ноль. Но наличие 2 значений и деление на 3 не дает полезного результата. – stwissel

5

Вы должны

  • стартует трассировку
  • Собирает каждую линию продукции (трубы, вероятно, хорошо работать здесь)
  • Используйте инструмент, например awk,
    • Анализ строки и извлечение необходимой информации
    • Сравните значения, которые вы только что получили с предыдущими значениями и сохранить текущую строку, если соответствующий
    • В конце ввода печати сохраненного значения
+0

Да - это общий подход. Получил образец кода? – stwissel

+4

@stwissel получил несколько $$$, чтобы пройти ко мне?Обычно мы не пишем сценариев и не работаем для людей, но мы рады указать вам в правильном направлении или даже отладить материал, если вы покажете нам свою работу. – Iain

+0

Выложил оригинальный вопрос о стекле, теперь добавил попытки, которые я сделал до сих пор. Для «чистого» traceroute у меня есть решение, но нужно сделать шаг, когда * вернется – stwissel

1

Стефан, вы можете попробовать и использовать PChar производного пути. Он должен находиться в репозитории Ubuntu.

Мне нужно некоторое время, чтобы бежать, так что вам нужно некоторое терпение. Он покажет вам пропускную способность, и это будет намного лучше, чем латентность для определения узкого места.

http://www.caida.org/tools/taxonomy/perftaxonomy.xml

Вот пример:

[email protected] ~ sudo pchar anddroiddevs.com 
pchar to anddroiddevs.com (31.221.38.104) using UDP/IPv4 
Using raw socket input 
Packet size increments from 32 to 1500 by 32 
46 test(s) per repetition 
32 repetition(s) per hop 
0: 192.168.0.20 (raydHPEliteBook8440p.local) 
    Partial loss:  0/1472 (0%) 
    Partial char:  rtt = 6.553065 ms, (b = 0.000913 ms/B), r2 = 0.241811 
         stddev rtt = 0.196989, stddev b = 0.000244 
    Partial queueing: avg = 0.012648 ms (13848 bytes) 
    Hop char:   rtt = 6.553065 ms, bw = 8759.575088 Kbps 
    Hop queueing:  avg = 0.012648 ms (13848 bytes) 
1: 80.5.69.1 (cpc2-glfd6-2-0-gw.6-2.cable.virginm.net) 
0

Использование mtr --raw -c 1 google.com. Это проще и легче разобрать.

Смежные вопросы