{"id":276,"date":"2018-06-10T19:28:37","date_gmt":"2018-06-10T18:28:37","guid":{"rendered":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/?p=276"},"modified":"2018-06-12T05:19:30","modified_gmt":"2018-06-12T04:19:30","slug":"bash-ping-erweiterung","status":"publish","type":"post","link":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/?p=276","title":{"rendered":"BASH Ping Erweiterung"},"content":{"rendered":"<p style=\"text-align: left;\">Kleines Shell Script als Erweiterung zum Standard Linux Ping Tool. Die Genauigkeit habe ich nicht getestet, es soll nur zur Einsch\u00e4tzung von Packetloss und Jitter dienen.<\/p>\n<p style=\"text-align: left;\"><code><br \/>\neping &lt;host&gt; [ping Options]<br \/>\n<\/code><\/p>\n<p style=\"text-align: left;\">Kleinster Intervall liegt bei etwa <code>-i 0.05<\/code> = 50ms, ggf. ist durch Optimierung des Scrips noch etwas mehr m\u00f6glich.<\/p>\n<p style=\"text-align: left;\">Ohne <code>[ping Options]<\/code> ist der Default Intervall 200ms (<code>-i 0.2<\/code>)<\/p>\n<p style=\"text-align: left;\">Beispiel:<\/p>\n<pre class=\"\">~\/pp # .\/eping 10.0.0.1 -i 1\r\n- req=6 last=6 c=6 l=0 sv=0 rtt(cur|avg|min|max)=14.3 13.8 13.4 14.3 jitter(c|min|max)=720 600 720 us\r\n<\/pre>\n<p style=\"text-align: left;\">Bash Script<\/p>\n<pre class=\"\">#!\/bin\/bash\r\nLANG=C\r\nIP=$1\r\n\r\nINTERVALL=0.2\r\nPINGOPT=\"-i $INTERVALL\"\r\n\r\nshift\r\n[ \"_$1\" == \"_\" ] || PINGOPT=\"$@\"\r\n\r\n\r\nlet count=0\r\nlet last_req=0\r\nlet loss=0\r\nlet run=1\r\n\r\nrtt=0\r\nlastrtt=0\r\nrttmax=0\r\nrttavg=0\r\nrttmin=10000000\r\nlet jitterdiff=0\r\nlet jitter=0\r\nlet jittermin=10000\r\nlet jittermax=0\r\nlet seqvio=0\r\n\r\ntrap \"run=0\" INT\r\n\r\n\r\n[ -z $TMPDIR ] &amp;&amp; TMPDIR=\/tmp\r\npipe1=$TMPDIR\/$(basename $0).pipe\r\nrm -f $pipe1\r\n\r\nif [[ ! -p $pipe1 ]]; then\r\n  mkfifo $pipe1\r\nfi\r\n\r\n\r\n\r\nwd_pp() {\r\n  while [ -p $2 ]; do\r\n    eval $1\r\n    # [ $? -eq 0 ] &amp;&amp; break\r\n    sleep 0.2\r\n  done\r\n}\r\n\r\nwd_pp \"ping $PINGOPT $IP &gt;$pipe1\" $pipe1 &amp;\r\n\r\n\r\n\r\nx='|\/-\\'\r\nstarttime=$(date '+%Y%m%d %H:%M:%S')\r\nwhile [ $run -eq 1 ]; do\r\n  if read line &lt;$pipe1; then\r\n    t=$(date +%Y%m%d_%H:%M:%S.%N)\r\n    if [[ \"$line\" == 'quit' ]]; then\r\n      break\r\n    fi\r\n    # echo $line | grep -v \"PING\" | cut -d':' -f2 | sed 's\/ms\/\/g' | sed 's\/ \/;\/g' | sed 's\/^;\/\/g' | sed 's\/;$\/\/g' | sed 's\/icmp_seq\/icmp_req\/g'\r\n    eval $(echo $line | grep -v \"PING\" | cut -d':' -f2 | sed 's\/ms\/\/g' | sed 's\/ \/;\/g' | sed 's\/^;\/\/g' | sed 's\/;$\/\/g' | sed 's\/icmp_seq\/icmp_req\/g' )\r\n    # echo \"icmp_req=$icmp_req\"\r\n    [ \"$icmp_req\" == \"\" ] &amp;&amp; continue\r\n    [ $run -eq 0 ] &amp;&amp; continue\r\n\r\n    rtt=$(echo \"$rtt + $time * 1000\" | bc -l)\r\n    utime=$(echo \"$time * 1000\" | bc | cut -d'.' -f1)\r\n\r\n    if [ $count -gt 0 ]; then\r\n      if [ $icmp_req -lt $(( last_req + 1 )) ]; then\r\n        let seqvio=seqvio+1\r\n      elif [ ! $icmp_req -eq $(( last_req + 1 )) ]; then\r\n        let loss=loss+1\r\n      fi\r\n      [ $utime -gt $lastrtt ] &amp;&amp; let jitterdiff=$jitterdiff+$utime-$lastrtt || let jitterdiff=$jitterdiff+$lastrtt-$utime\r\n      jitter=$(echo \"$jitterdiff\/$count\" | bc -l | cut -d'.' -f1)\r\n    fi\r\n    let last_req=$icmp_req\r\n\r\n    lastrtt=$utime\r\n    let count=count+1\r\n    rttavg=$(echo \"$rtt \/ 1000 \/ $count\" | bc -l | cut -b1-4)\r\n    rttime=$(printf \"%.0f\" $(echo \"$time * 1000\" | bc -l))\r\n    [ $rttime -gt $rttmax ] &amp;&amp; rttmax=$rttime\r\n    [ $rttime -lt $rttmin ] &amp;&amp; rttmin=$rttime\r\n    [ $jitter -gt $jittermax ] &amp;&amp; jittermax=$jitter\r\n    [ $jitter -gt 0 ] &amp;&amp; [ $jitter -lt $jittermin ] &amp;&amp; jittermin=$jitter\r\n\r\n    y=$(($count%4));\r\n    echo -ne \"${x:y:1} req=$icmp_req last=$last_req c=$count l=$loss sv=$seqvio rtt(c|a|min|max)=$time $rttavg $(echo \"$rttmin\/1000\" | bc -l | cut -b1-4) $(echo \"$rttmax\/1000\" | bc -l | cut -b1-4) \"\r\n    echo -ne \"jitter(c|min|max)=$jitter $jittermin $jittermax us     \\r\"\r\n\r\n  fi\r\n\r\n  read -n 1 -t 0.005 -s k\r\n  case $k in\r\n    q|Q) run=0;;\r\n    c|C) jittermin=10000; jittermax=0; rttmin=10000000; rttmax=0; loss=0; seqvio=0;;\r\n  esac\r\ndone\r\nendtime=$(date '+%Y%m%d %H:%M:%S')\r\n\r\n\r\nrm -f $pipe1\r\n\r\necho -ne \"\\r                                                                                 \\n\"\r\necho \"Test start:    $starttime\"\r\necho \"test end:      $endtime\"\r\necho \"Ping Options   '$PINGOPT'\"\r\necho \"Loss           $loss\/$count = $(echo \"$loss * 100 \/$count\" | bc -l | cut -b1-4)%\"\r\necho \"RTT avg        $rttavg\"\r\necho \"RTT min        $(echo \"$rttmin\/1000\" | bc -l | cut -b1-4)\"\r\necho \"RTT max        $(echo \"$rttmax\/1000\" | bc -l | cut -b1-4)\"\r\necho \"Jitter         $jitter us (10^-6)\"\r\necho \"Jitter min     $jittermin us (10^-6)\"\r\necho \"Jitter max     $jittermax us (10^-6)\"\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Kleines Shell Script als Erweiterung zum Standard Linux Ping Tool. Die Genauigkeit habe ich nicht getestet, es soll nur zur Einsch\u00e4tzung von Packetloss und Jitter dienen. eping &lt;host&gt; [ping Options] Kleinster Intervall liegt bei etwa -i 0.05 = 50ms, ggf. &hellip; <a href=\"https:\/\/www.scheffer-online.de\/blog\/wordpress\/?p=276\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[19],"class_list":["post-276","post","type-post","status-publish","format-standard","hentry","category-linux","category-networks","tag-ping"],"_links":{"self":[{"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=276"}],"version-history":[{"count":18,"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/276\/revisions"}],"predecessor-version":[{"id":295,"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/276\/revisions\/295"}],"wp:attachment":[{"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scheffer-online.de\/blog\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}