package main

import ( "fmt" "net" "os/exec" "sort" "strings" )

func main() { var ips []string ip, ipnet, _ := net.ParseCIDR("103.21.244.0/22") for ip := ip.Mask(ipnet.Mask); ipnet.Contains(ip); inc(ip) { ips = append(ips, ip.String()) }

pingResults := make(map[string]float64)
for _, ip := range ips {
	cmd := exec.Command("ping", "-c", "5", ip)
	out, _ := cmd.CombinedOutput()
	output := string(out)
	if strings.Contains(output, "5 packets transmitted, 5 packets received") {
		lines := strings.Split(output, "\n")
		timeLine := lines[len(lines)-2]
		time := strings.Split(timeLine, " ")[3]
		pingResults[ip] = strToFloat(time)
	}
}

var sortedIps []string
for ip := range pingResults {
	sortedIps = append(sortedIps, ip)
}
sort.Slice(sortedIps, func(i, j int) bool {
	return pingResults[sortedIps[i]] < pingResults[sortedIps[j]]
})

for _, ip := range sortedIps[:10] {
	fmt.Printf("ip: %s, ping: %.2fms\n", ip, pingResults[ip])
}

}

func inc(ip net.IP) { for j := len(ip) - 1; j >= 0; j-- { ip[j]++ if ip[j] > 0 { break } } }

func strToFloat(str string) float64 { var result float64 fmt.Sscanf(str, "%f", &result) return result }

编写一个go语言代码功能:1、获取10321244022网段的所有ip2、找出这些ip内ping值最小的10个

原文地址: https://www.cveoy.top/t/topic/bH0W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录