Skip to content

Instantly share code, notes, and snippets.

@miminashi
Last active August 14, 2022 19:16
Show Gist options
  • Save miminashi/23b381e8ea2cf394b3506401720c72ac to your computer and use it in GitHub Desktop.
Save miminashi/23b381e8ea2cf394b3506401720c72ac to your computer and use it in GitHub Desktop.
並列ping
#!/bin/sh
#
# dping
#
# 説明:
# 並列pingツール.
# 標準入力からホストの一覧を受け取り, 複数のホストに対して並列にpingを実行する.
#
# 使い方:
# curl -L https://gist.githubusercontent.com/miminashi/23b381e8ea2cf394b3506401720c72ac/raw > dping
# chmod +x dping
# cat > hosts <<EOF
# 10.0.0.1
# 10.0.0.2
# 10.0.0.3
# 10.0.0.4
# 10.1.0.1
# 10.1.0.2
# 10.1.1.1
# EOF
# ./dping < hosts
#
# 最後の結果(round-trip)だけほしいとき:
# ./dping < hosts | grep 'round-trip min\/avg\/max\/stddev'
# 最後の結果(packet loss)だけほしいとき:
# ./dping < hosts | grep '. packets transmitted, . packets received'
# 最後の結果(packet loss)だけIPアドレスが若い順にソート:
# ./dping < hosts | grep '. packets transmitted, . packets received' | sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4n
# 最後の結果(round-trip)だけIPアドレスが若い順にソート:
# ./dping < hosts | grep 'round-trip min\/avg\/max\/stddev' | sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4n
# 最後の結果(packet loss と round-trip)だけIPアドレスが若い順にソート:
# ./dping < hosts | grep -e 'round-trip min\/avg\/max\/stddev' -e '. packets transmitted, . packets received' | sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4n
# 最後の結果(packet loss)だけIPアドレスが若い順にソートしてパケットロス率で色分け:
# ./dping < hosts | grep '. packets transmitted, . packets received' | sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4n | while read -r l; do echo "${l}" | if grep ' 0.0% packet loss' > /dev/null; then printf '\e[32m%s\e[m\n' "${l}"; elif echo "${l}" | grep ' 100.0% packet loss' > /dev/null; then printf '\e[31m%s\e[m\n' "${l}"; else printf '\e[33m%s\e[m\n' "${l}"; fi; done
# Scrapboxからホスト一覧を取得して最後の結果(packet loss)だけIPアドレスが若い順にソートしてパケットロス率で色分け:
# curl -sL https://bit.ly/3Pqs3W5 | sed 1d | cut -d ',' -f 2 | tr -d '[]' | ./dping | grep '. packets transmitted, . packets received' | sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4n | while read -r l; do echo "${l}" | if grep ' 0.0% packet loss' > /dev/null; then printf '\e[32m%s\e[m\n' "${l}"; elif echo "${l}" | grep ' 100.0% packet loss' > /dev/null; then printf '\e[31m%s\e[m\n' "${l}"; else printf '\e[33m%s\e[m\n' "${l}"; fi; done
#
#
# 付録:
# Scrapboxの`GSNetのホスト一覧`から`hosts`ファイルを作成する:
# curl -sL https://bit.ly/3Pqs3W5 | sed 1d | cut -d ',' -f 2 | tr -d '[]' > hosts
#
# See Also:
# https://scrapbox.io/Geek-SpaceBox/%E9%97%87%E3%83%8D%E3%83%83%E3%83%88
#
while read -r host; do
ping -c 4 "${host}" |
while read -r l; do
printf '%s %s %s\n' "${host}" "$(date +%s)" "${l}"
done &
done
wait
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment