package constant // Rule Type const ( Domain RuleType = iota DomainSuffix DomainKeyword GEOSITE GEOIP IPCIDR SrcIPCIDR IPSuffix SrcIPSuffix SrcPort DstPort Process Script ProcessPath RuleSet Network Uid INTYPE MATCH AND OR NOT ) type RuleType int func (rt RuleType) String() string { switch rt { case Domain: return "Domain" case DomainSuffix: return "DomainSuffix" case DomainKeyword: return "DomainKeyword" case GEOSITE: return "GeoSite" case GEOIP: return "GeoIP" case IPCIDR: return "IPCIDR" case SrcIPCIDR: return "SrcIPCIDR" case IPSuffix: return "IPSuffix" case SrcIPSuffix: return "SrcIPSuffix" case SrcPort: return "SrcPort" case DstPort: return "DstPort" case Process: return "Process" case ProcessPath: return "ProcessPath" case MATCH: return "Match" case RuleSet: return "RuleSet" case Network: return "Network" case Script: return "Script" case Uid: return "Uid" case INTYPE: return "InType" case AND: return "AND" case OR: return "OR" case NOT: return "NOT" default: return "Unknown" } } type Rule interface { RuleType() RuleType Match(metadata *Metadata) bool Adapter() string Payload() string ShouldResolveIP() bool ShouldFindProcess() bool RuleExtra() *RuleExtra SetRuleExtra(re *RuleExtra) } type JSMetadata struct { Type string `json:"type"` Network string `json:"network"` Host string `json:"host"` SrcIP string `json:"srcIP"` DstIP string `json:"dstIP"` SrcPort string `json:"srcPort"` DstPort string `json:"dstPort"` Uid *int32 `json:"uid"` Process string `json:"process"` ProcessPath string `json:"processPath"` }