欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go實(shí)現(xiàn)fping功能

 更新時(shí)間:2020年11月30日 09:38:30   作者:來(lái)我長(zhǎng)街吹吹風(fēng)  
這篇文章主要介紹了go實(shí)現(xiàn)fping功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1、什么是fping

fping 是一個(gè)類(lèi)似 ping 的程序,與 ping 不同的是你可以同時(shí)指定多個(gè)要 ping 的目標(biāo)。
fping 發(fā)送完 ping 包后不等待回應(yīng),而是繼續(xù)下一個(gè)目標(biāo)

3、具體實(shí)現(xiàn)

1.獲取IP段

// IP段
'1', '2020-11-26 17:11:39.515', '2020-11-26 17:11:39.515', '1.0.1.0', '1.0.3.255', '福建', '電信'
'2', '2020-11-26 17:11:43.553', '2020-11-26 17:11:43.553', '1.0.8.0', '1.0.15.255', '廣東', '電信'
'3', '2020-11-26 17:11:47.563', '2020-11-26 17:11:47.563', '1.0.32.0', '1.0.63.255', '廣東', '電信'
'4', '2020-11-26 17:11:53.621', '2020-11-26 17:11:53.621', '1.1.0.0', '1.1.0.255', '福建', '電信'
'5', '2020-11-26 17:11:57.635', '2020-11-26 17:11:57.635', '1.1.2.0', '1.1.7.255', '福建', '電信'
'6', '2020-11-26 17:11:59.642', '2020-11-26 17:11:59.642', '1.1.8.0', '1.1.63.255', '廣東', '電信'
'7', '2020-11-26 17:12:05.671', '2020-11-26 17:12:05.671', '1.2.0.0', '1.2.1.255', '福建', '電信'
'8', '2020-11-26 17:12:07.674', '2020-11-26 17:12:07.674', '1.2.2.0', '1.2.2.255', '北京', '聯(lián)通'
'9', '2020-11-26 17:12:13.690', '2020-11-26 17:12:13.690', '1.2.5.0', '1.2.7.255', '北京', '電信'

2.ping方法(單個(gè),多個(gè)已給出)

// 單個(gè)ping
// IsAlivePing : 檢測(cè)目標(biāo)IP是否能夠ping通,target為目標(biāo)IP
func IsAlivePing(target string) (bool, error) {
 pinger, err := ping.NewPinger(target)
 if err != nil {
 return false, err
 }
 pinger.Count = 10
 PINGTIME := time.Duration(1000)
 pinger.Timeout = time.Duration(PINGTIME * time.Millisecond)
 pinger.SetPrivileged(true) // 選擇icmp,不選擇udp
 pinger.Run()
 stats := pinger.Statistics()
 // 判斷是否有接收到的包
 if stats.PacketsRecv >= 1 {
 return true, nil
 }
 return false, nil
}

// 多個(gè)ping:得到死IP
// FilterActiveIPs : 過(guò)濾活I(lǐng)P,篩選出死IP
func FilterActiveIPs(ips []string) (inactiveIPs []string) {
 var lock sync.Mutex
 var wg sync.WaitGroup
 wg.Add(len(ips))
 for _, ip := range ips {
 go func(ip string) {
 defer wg.Done()
 // 判斷是死ip,并且格式正確
 isAlive, err := IsAlivePing(ip)
 if !isAlive && err == nil {
 RandomSleep(2) // 睡眠[1,2]秒,二次確認(rèn)是否為死IP
 if isAlive, _ := IsAlivePing(ip); !isAlive {
  RandomSleep(2) // 再睡眠[1,2]秒,三次確認(rèn)是否為死IP
  if isAlive, _ := IsAlivePing(ip); !isAlive {
  lock.Lock()
  defer lock.Unlock()
  inactiveIPs = append(inactiveIPs, ip)
  }
 }
 }
 }(ip)
 }
 wg.Wait()
 return inactiveIPs
}

// 多個(gè)ping:得到活I(lǐng)P
// FilterInactiveIPs : 過(guò)濾死IP,篩選出活I(lǐng)P
func FilterInactiveIPs(ips []string) (activeIPs []string) {
 var lock sync.Mutex
 var wg sync.WaitGroup
 wg.Add(len(ips))
 for _, ip := range ips {
 go func(ip string) {
 defer wg.Done()
 // 判斷是活ip,并且格式正確
 if isAlive, err := IsAlivePing(ip); isAlive && err == nil {
 lock.Lock()
 defer lock.Unlock()
 activeIPs = append(activeIPs, ip)
 }
 }(ip)
 }
 wg.Wait()
 return activeIPs
}

// RandomSleep : 隨機(jī)睡眠[1,t]秒
func RandomSleep(t int) {
 rand.Seed(time.Now().UnixNano())
 r := time.Duration(rand.Intn(t) + 1)
 time.Sleep(r * time.Second)
}

3.分解IP段

// Separation : 分解IP段
func (i *impl) Separation(minIP, maxIP string) []string {
	shouldStrs := make([]string, 0) // 這是IP段的所有IP
	// for i := 0; i < l; i = i + 2 {
	min, _ := IPString2Long(minIP) // 這里有一個(gè)轉(zhuǎn)化,我默認(rèn)給的是正確的IP,如果兄弟們不確定傳入的IP格式是否正確,那么要判斷err
	max, _ := IPString2Long(maxIP)
	for min <= max {
		minIPstr, _ := Long2IPString(min)
		xxxip := net.ParseIP(minIPstr).To4()
		if xxxip[3] != 0 && xxxip[3] != 255 { // 兄弟們,這個(gè)判斷取決于你們想不想要兩個(gè)端點(diǎn)
			shouldStrs = append(shouldStrs, minIPstr)
		}
		min++
	}

 // TODO: 兄弟們,可以把這句刪除了
	fmt.Printf("IP段%s--%s不包括兩端的長(zhǎng)度: %d\n", minIP, maxIP, len(shouldStrs))
	return shouldStrs
}

// Long2IPString 把數(shù)值轉(zhuǎn)為ip字符串
func Long2IPString(i uint) (string, error) {
	if i > math.MaxUint32 {
		return "", errors.New("beyond the scope of ipv4")
	}

	ip := make(net.IP, net.IPv4len)
	ip[0] = byte(i >> 24)
	ip[1] = byte(i >> 16)
	ip[2] = byte(i >> 8)
	ip[3] = byte(i)

	return ip.String(), nil
}

// IPString2Long 把ip字符串轉(zhuǎn)為數(shù)值
func IPString2Long(ip string) (uint, error) {
	b := net.ParseIP(ip).To4()
	if b == nil {
		return 0, errors.New("invalid ipv4 format")
	}

	return uint(b[3]) | uint(b[2])<<8 | uint(b[1])<<16 | uint(b[0])<<24, nil
}

到此這篇關(guān)于go實(shí)現(xiàn)fping功能的文章就介紹到這了,更多相關(guān)go實(shí)現(xiàn)fping內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Golang如何調(diào)用Linux命令詳解

    利用Golang如何調(diào)用Linux命令詳解

    這篇文章主要給大家介紹了Golang中使用os/exec來(lái)執(zhí)行 Linux 命令的相關(guān)資料,文中給出了詳細(xì)的示例代碼,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • golang中之strconv包的具體使用方法

    golang中之strconv包的具體使用方法

    這篇文章主要介紹了golang中之strconv包的具體使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Golang?pprof性能測(cè)試與分析講解

    Golang?pprof性能測(cè)試與分析講解

    剛開(kāi)始接觸go就遇到了一個(gè)內(nèi)存問(wèn)題,在進(jìn)行內(nèi)存分析的時(shí)候發(fā)現(xiàn)了一下比較好的工具,在此留下記錄,下面這篇文章主要給大家介紹了關(guān)于go性能分析工具pprof的性能測(cè)試,需要的朋友可以參考下
    2023-04-04
  • Go語(yǔ)言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口

    Go語(yǔ)言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)單端口轉(zhuǎn)發(fā)到多個(gè)端口,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的小伙伴可以了解下
    2024-02-02
  • 手把手帶你走進(jìn)Go語(yǔ)言之運(yùn)算符解析

    手把手帶你走進(jìn)Go語(yǔ)言之運(yùn)算符解析

    這篇文章主要介紹了手Go語(yǔ)言之運(yùn)算符解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 解決Golang并發(fā)工具Singleflight的問(wèn)題

    解決Golang并發(fā)工具Singleflight的問(wèn)題

    前段時(shí)間在一個(gè)項(xiàng)目里使用到了分布式鎖進(jìn)行共享資源的訪問(wèn)限制,后來(lái)了解到Golang里還能夠使用singleflight對(duì)共享資源的訪問(wèn)做限制,于是利用空余時(shí)間了解,將知識(shí)沉淀下來(lái),并做分享
    2022-05-05
  • Golang捕獲panic堆棧信息的講解

    Golang捕獲panic堆棧信息的講解

    今天小編就為大家分享一篇關(guān)于Golang捕獲panic堆棧信息的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • golang實(shí)現(xiàn)給圖片加水印

    golang實(shí)現(xiàn)給圖片加水印

    這篇文章主要為大家詳細(xì)介紹了Vue3如何利用golang實(shí)現(xiàn)給圖片加水印,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-12-12
  • Go語(yǔ)言中實(shí)現(xiàn)完美錯(cuò)誤處理實(shí)踐分享

    Go語(yǔ)言中實(shí)現(xiàn)完美錯(cuò)誤處理實(shí)踐分享

    Go?語(yǔ)言是一門(mén)非常流行的編程語(yǔ)言,由于其高效的并發(fā)編程和出色的網(wǎng)絡(luò)編程能力,越來(lái)越受到廣大開(kāi)發(fā)者的青睞。本文我們就來(lái)深入探討一下Go?語(yǔ)言中的錯(cuò)誤處理機(jī)制吧
    2023-04-04
  • GoFrame?gredis緩存DoVar及Conn連接對(duì)象的自動(dòng)序列化

    GoFrame?gredis緩存DoVar及Conn連接對(duì)象的自動(dòng)序列化

    這篇文章主要為大家介紹了GoFrame?gredis干貨DoVar?Conn連接對(duì)象自動(dòng)序列化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論