代码拉取完成,页面将自动刷新
package main
import (
"fmt"
"log"
"os"
"gitee.com/liumou_site/gns/ping"
)
func main() {
if len(os.Args) < 2 {
fmt.Println("用法: go run ping_stats_example.go <主机地址> [ping次数]")
fmt.Println("示例: go run ping_stats_example.go 8.8.8.8 10")
os.Exit(1)
}
host := os.Args[1]
count := 4 // 默认ping次数
if len(os.Args) >= 3 {
if _, err := fmt.Sscanf(os.Args[2], "%d", &count); err != nil {
log.Fatalf("无效的ping次数: %s", os.Args[2])
}
}
// 创建Ping实例
p := ping.NewPing(count, 5)
fmt.Printf("正在ping %s,发送 %d 个包...\n", host, count)
// 执行ping并获取统计信息
result, err := p.ICMPWithStats(host, count, true)
if err != nil {
log.Printf("Ping失败: %v", err)
// 即使失败也显示部分结果
}
// 显示详细的统计信息
fmt.Println("\n=== Ping统计结果 ===")
fmt.Printf("目标主机: %s\n", result.Host)
fmt.Printf("发送包数: %d\n", result.Sent)
fmt.Printf("接收包数: %d\n", result.Received)
fmt.Printf("丢失包数: %d\n", result.Lost)
fmt.Printf("丢包率: %.2f%%\n", result.LossRate)
if result.Received > 0 {
fmt.Printf("最小RTT: %v\n", result.MinRTT)
fmt.Printf("最大RTT: %v\n", result.MaxRTT)
fmt.Printf("平均RTT: %v\n", result.AvgRTT)
// 显示所有RTT值
fmt.Println("\n详细RTT信息:")
for i, rtt := range result.RTTs {
fmt.Printf(" 包 %d: %v\n", i+1, rtt)
}
}
// 根据丢包率给出网络质量评估
fmt.Println("\n=== 网络质量评估 ===")
switch {
case result.LossRate == 0:
fmt.Println("网络质量: 优秀 (无丢包)")
case result.LossRate < 1:
fmt.Println("网络质量: 良好 (丢包率 < 1%)")
case result.LossRate < 5:
fmt.Println("网络质量: 一般 (丢包率 1-5%)")
case result.LossRate < 10:
fmt.Println("网络质量: 较差 (丢包率 5-10%)")
default:
fmt.Println("网络质量: 很差 (丢包率 > 10%)")
}
if result.Received > 0 {
switch {
case result.AvgRTT < 10:
fmt.Println("延迟质量: 优秀 (平均RTT < 10ms)")
case result.AvgRTT < 50:
fmt.Println("延迟质量: 良好 (平均RTT 10-50ms)")
case result.AvgRTT < 100:
fmt.Println("延迟质量: 一般 (平均RTT 50-100ms)")
case result.AvgRTT < 200:
fmt.Println("延迟质量: 较差 (平均RTT 100-200ms)")
default:
fmt.Println("延迟质量: 很差 (平均RTT > 200ms)")
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。