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, '

') 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

', 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 语言代码:获取网段 IP 并找出 ping 值最小的 10 个

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

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