Created
June 23, 2022 06:08
-
-
Save LatinSuD/46ffa23aeb9f12773c0032f0ba7d8dfc to your computer and use it in GitHub Desktop.
Ping Continuo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Hace pings normales y solo muestra cuando hay perdidas | |
export LANG=C | |
if [ -t 1 ]; then # es shell interactivo | |
trap "stty echo; echo" SIGINT SIGTERM | |
stty -echo | |
export INTERACTIVO=1 | |
fi | |
# Detectar version de awk y sus parametros recomendados | |
if awk -Wv 2>/dev/null | head -1 | grep -q '^mawk'; then | |
awk_args=('-W' 'interactive') | |
else | |
awk_args=() | |
fi | |
{ | |
ping "$@" & | |
#cat /usr/local/bin/kkf | awk '{system("sleep 0.5"); print}' | |
while test $(jobs -rp | wc -l) -gt 0; do sleep 1.1; echo s ; done | |
} | | |
egrep --line-buffered '^s$|icmp_(r|s)eq' | | |
sed -u -r 's/.*icmp_(r|s)eq=([0-9]+) .*/\2/' | | |
awk "${awk_args[@]}" ' | |
BEGIN { | |
BORRADO="\r \r" | |
seq=1 # Siguiente seq esperado | |
ultimoseq16=1 # Codigo SEQ original del icmp. Son 16 bits solo. | |
perdidos=0 | |
recienperdido=0 | |
animacion[0]="|"; animacion[1]="/"; animacion[2]="-"; animacion[3]="\\"; | |
estadoanimacion=0 # Cada vez que llamamos a estado sin que haya habido pings de por medio animamos la barrita | |
vuelta=0 # como ping va hasta 65536 cada vuelta se incrementa esta variable | |
vivo=0 # Se pone a 0 si no se han visto pings entre 2 impresiones de estado | |
} | |
/[0-9]/ { | |
if (ultimoseq16>60000 && $1<5000) { | |
vuelta++ | |
} | |
ultimoseq16=$1 | |
curseq=$1 + vuelta*65536 | |
if (curseq != seq) { | |
perdidos += (curseq-seq) | |
if (ENVIRON["INTERACTIVO"]==1) { | |
printf("%s", BORRADO) | |
} | |
printf("%s", "Perdidos " (curseq-seq) " en " curseq " ") | |
system("date"); | |
recienperdido=1 | |
}; | |
seq=curseq+1 | |
vivo=1 | |
estadoanimacion=0 | |
} | |
function estado(anima) { | |
if (vivo == 0 && anima) | |
estadoanimacion += anima | |
if ((seq-1) == 0) { | |
porecentaje=0 | |
} else { | |
porcentaje=100*perdidos/(seq-1) | |
} | |
if (ENVIRON["INTERACTIVO"]==1) { | |
printf("%s%.1f%s", BORRADO "Total perdidos: " perdidos "/" (seq-1) " ", porcentaje, "% " animacion[estadoanimacion%4]); | |
} | |
vivo=0 | |
} | |
{ | |
if ($1 == "s" || recienperdido) { | |
estado(1) | |
} | |
recienperdido=0 | |
} | |
END { | |
estado(0) | |
print "" | |
} | |
' | |
if [ -t 1 ]; then # es shell interactivo | |
stty echo | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment