MCPcopy
hub / github.com/shadow1ng/fscan / ArrayCountValueTop

Function ArrayCountValueTop

core/icmp.go:633–685  ·  view source on GitHub ↗

ArrayCountValueTop 统计IP地址段存活数量并返回TOP N结果

(arrInit []string, length int, flag bool)

Source from the content-addressed store, hash-verified

631
632// ArrayCountValueTop 统计IP地址段存活数量并返回TOP N结果
633func ArrayCountValueTop(arrInit []string, length int, flag bool) (arrTop []string, arrLen []int) {
634 if len(arrInit) == 0 {
635 return
636 }
637
638 // 统计各网段出现次数,预分配容量
639 segmentCounts := make(map[string]int, len(arrInit)/4)
640 for _, ip := range arrInit {
641 segments := strings.Split(ip, ".")
642 if len(segments) != 4 {
643 continue
644 }
645
646 // 根据flag确定统计B段还是C段
647 var segment string
648 if flag {
649 segment = fmt.Sprintf("%s.%s", segments[0], segments[1]) // B段
650 } else {
651 segment = fmt.Sprintf("%s.%s.%s", segments[0], segments[1], segments[2]) // C段
652 }
653
654 segmentCounts[segment]++
655 }
656
657 // 创建副本用于排序
658 sortMap := make(map[string]int)
659 for k, v := range segmentCounts {
660 sortMap[k] = v
661 }
662
663 // 获取TOP N结果
664 for i := 0; i < length && len(sortMap) > 0; i++ {
665 maxSegment := ""
666 maxCount := 0
667
668 // 查找当前最大值
669 for segment, count := range sortMap {
670 if count > maxCount {
671 maxCount = count
672 maxSegment = segment
673 }
674 }
675
676 // 添加到结果集
677 arrTop = append(arrTop, maxSegment)
678 arrLen = append(arrLen, maxCount)
679
680 // 从待处理map中删除已处理项
681 delete(sortMap, maxSegment)
682 }
683
684 return
685}
686
687// =============================================================================
688// TCP 补充探测 - 当 ICMP 响应率过低时自动启用

Callers 4

TestArrayCountValueTopFunction · 0.85
printAliveStatsFunction · 0.85

Calls

no outgoing calls

Tested by 3

TestArrayCountValueTopFunction · 0.68