HE ipv6 隧道 IP 地址网络延迟测量脚本
此Bash脚本用于测量预定义列表中全球各地IP地址的网络延迟。脚本从嵌入式数据中提取有效的IP地址和对应的地理位置,然后逐一执行
ping命令,计算每个IP地址的平均往返时间(RTT)。最终,脚本会格式化输出每个位置的名称及其平均网络延迟,或者在无法访问或超时的情况下显示失败信息。
#!/bin/bash
# 将您的数据直接放入脚本中
# 使用 "heredoc" 语法,这是一种在脚本中嵌入多行文本的好方法
DATA=$(cat <<'EOF'
Ashburn, VA, US 216.66.22.2
Calgary, AB, CA 216.218.200.58
Chicago, IL, US 184.105.253.14
Dallas, TX, US 184.105.253.10
Denver, CO, US 184.105.250.46
Fremont, CA, US 72.52.104.74
Fremont, CA, US 64.62.134.130
Honolulu, HI, US 64.71.156.86
Kansas City, MO, US 216.66.77.230
Los Angeles, CA, US 66.220.18.42
Miami, FL, US 209.51.161.58
New York, NY, US 209.51.161.14
Phoenix, AZ, US 66.220.7.82
Seattle, WA, US 216.218.226.238
Toronto, ON, CA 216.66.38.58
Winnipeg, MB, CA 184.105.255.26
Europe
Amsterdam, NL Not Available (Full)
Berlin, DE 216.66.86.114
Budapest, HU 216.66.87.14
Frankfurt, DE 216.66.80.30
Lisbon, PT 216.66.87.102
London, UK 216.66.80.26
London, UK 216.66.88.98
Paris, FR 216.66.84.42
Prague, CZ 216.66.86.122
Stockholm, SE 216.66.80.90
Warsaw, PL Not Available (Full)
Zurich, CH 216.66.80.98
Asia
Hong Kong, HK 216.218.221.6
Singapore, SG 216.218.221.42
Tokyo, JP 74.82.46.6
Africa
Djibouti City, DJ 216.66.87.98
Johannesburg, ZA 216.66.87.134
South America
Bogota, CO 216.66.64.154
Oceania
Sydney, NSW, AU 216.218.142.50
Middle East
Dubai, AE 216.66.90.30
EOF
)
# 使用 echo 和管道处理数据
echo "$DATA" | \
# 过滤掉包含 "Not Available" 和没有IP地址的行
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
# 逐行读取
while read -r line; do
# 提取IP地址 (该行的最后一个词)
ip=$(echo "$line" | awk '{print $NF}')
# 提取位置信息 (除最后一个词外的所有内容)
location=$(echo "$line" | sed -e "s/\s*$ip\s*$//")
# 执行 ping 命令并提取平均延迟
# -c 4: 发送4个数据包
# -W 2: 每个包的超时时间为2秒 (避免对不通的IP等待太久)
# 2>/dev/null: 忽略错误输出 (例如 "unknown host")
# awk -F'/' '/rtt/ {print $5}': 在包含'rtt'的行中,以'/'为分隔符,打印第5个字段 (即 average)
avg_latency=$(ping -c 4 -W 2 "$ip" 2>/dev/null | awk -F'/' '/rtt/ {print $5}')
# 检查 avg_latency 是否有值
if [ -n "$avg_latency" ]; then
# 使用 printf 进行格式化输出,使其对齐
printf "%-35s : %.3f ms\n" "$location" "$avg_latency"
else
printf "%-35s : %s\n" "$location" "FAIL (无法访问或超时)"
fi
done