编写一个go语言代码功能:1、获取10321244022网段的所有ip2、找出这些ip内ping值最小的10个
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 }
原文地址: https://www.cveoy.top/t/topic/bH0W 著作权归作者所有。请勿转载和采集!