iptables-helper/pkg/utils/iptables/flag_test.go
2023-11-02 14:01:46 +08:00

78 lines
1.9 KiB
Go

package iptables
import (
"fmt"
flag "github.com/spf13/pflag"
"iptables-helper/pkg/logger"
"iptables-helper/pkg/utils/command"
"strings"
"testing"
)
func TestFlag(t *testing.T) {
cmder := command.Commander{}
result := cmder.ExecuteWithResult("sudo iptables -S")
results := strings.Split(result, "\n")
policyList := make([]Policy, 0)
chainList := make([]Chain, 0)
for _, rule := range results {
logger.Log().Debug("解析规则: ", rule)
//rule := "-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER"
// 转化以便解析
rule = strings.ReplaceAll(rule, " ! ", " -! ")
flagSet := flag.FlagSet{}
flagSet.ParseErrorsWhitelist = flag.ParseErrorsWhitelist{UnknownFlags: true}
var reverse bool
var dst string
// 优先解析/判断 P N A 三个基本类型
var policy string
// 策略
flagSet.StringVarP(&policy, "policy", "P", "", "")
var appendRule string
// 追加规则
flagSet.StringVarP(&appendRule, "append", "A", "", "")
var newChain string
// 创建自定义规则链
flagSet.StringVarP(&newChain, "new-chain", "N", "", "")
flagSet.BoolVarP(&reverse, "!", "!", false, "")
flagSet.StringVarP(&dst, "destination", "d", "", "")
_ = flagSet.Parse(strings.Split(rule, " "))
if len(policy) > 0 {
target := flagSet.Arg(0)
logger.Log().Infof("默认策略 %+v %+v", policy, target)
chain := Chain(policy)
chainList = append(chainList, chain)
policyList = append(policyList, Policy{chain, PolicyTarget(target)})
continue
}
if len(newChain) > 0 {
chainList = append(chainList, Chain(newChain))
continue
}
//logger.Log().Debugf("appendRule %+v", appendRule)
//logger.Log().Debugf("reverse %+v", reverse)
}
for i := 0; i < 50; i++ {
fmt.Print("=")
}
fmt.Println()
for _, policy := range policyList {
logger.Log().Infof("默认策略: %s => %s", policy.Name, policy.Target)
}
for _, chain := range chainList {
logger.Log().Infof("自定义规则链: %s", chain)
}
}