优化Firewalld添加端口方法,自动聚合连续的端口号

This commit is contained in:
刘祥超
2022-07-21 11:53:23 +08:00
parent 25c11f3d69
commit 62f9d1f09a
4 changed files with 156 additions and 37 deletions

View File

@@ -7,6 +7,7 @@ import (
"context"
"github.com/iwind/TeaGo/logs"
"net"
"sort"
"syscall"
)
@@ -38,3 +39,34 @@ func ParseAddrHost(addr string) string {
}
return host
}
// MergePorts 聚合端口
// 返回 [ [fromPort, toPort], ... ]
func MergePorts(ports []int) [][2]int {
if len(ports) == 0 {
return nil
}
sort.Ints(ports)
var result = [][2]int{}
var lastRange = [2]int{0, 0}
var lastPort = -1
for _, port := range ports {
if port <= 0 /** 只处理有效的端口 **/ || port == lastPort /** 去重 **/ {
continue
}
if lastPort < 0 || port != lastPort+1 {
lastRange = [2]int{port, port}
result = append(result, lastRange)
} else { // 如果是连续的
lastRange[1] = port
result[len(result)-1] = lastRange
}
lastPort = port
}
return result
}