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) } }