mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2026-05-20 09:55:29 +08:00
优化Firewalld添加端口方法,自动聚合连续的端口号
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -12,3 +12,15 @@ func TestParseAddrHost(t *testing.T) {
|
||||
t.Log(addr + " => " + utils.ParseAddrHost(addr))
|
||||
}
|
||||
}
|
||||
|
||||
func TestMergePorts(t *testing.T) {
|
||||
for _, ports := range [][]int{
|
||||
{},
|
||||
{80},
|
||||
{80, 83, 85},
|
||||
{80, 81, 83, 85, 86, 87, 88, 90},
|
||||
{0, 0, 1, 1, 2, 2, 2, 3, 3, 3},
|
||||
} {
|
||||
t.Log(ports, "=>", utils.MergePorts(ports))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user