Last active
August 14, 2022 19:16
-
-
Save miminashi/23b381e8ea2cf394b3506401720c72ac to your computer and use it in GitHub Desktop.
並列ping
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/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