spray/pkg/load.go

137 lines
2.7 KiB
Go
Raw Normal View History

2024-02-07 02:59:55 +08:00
package pkg
import (
2025-02-23 00:02:20 +08:00
"fmt"
2024-03-04 20:03:06 +08:00
"github.com/chainreactors/fingers"
2024-02-07 02:59:55 +08:00
"github.com/chainreactors/parsers"
2024-07-14 03:27:20 +08:00
"github.com/chainreactors/utils"
2024-02-07 02:59:55 +08:00
"github.com/chainreactors/utils/iutils"
"github.com/chainreactors/words/mask"
2024-02-20 19:12:05 +08:00
"os"
yaml "sigs.k8s.io/yaml/goyaml.v3"
2024-02-07 02:59:55 +08:00
"strings"
)
2024-07-17 01:40:30 +08:00
func LoadPorts() error {
var err error
var ports []*utils.PortConfig
2025-02-23 00:02:20 +08:00
err = yaml.Unmarshal(LoadConfig("port"), &ports)
2024-07-17 01:40:30 +08:00
if err != nil {
return err
}
utils.PrePort = utils.NewPortPreset(ports)
return nil
}
func LoadFingers() error {
2024-02-07 02:59:55 +08:00
var err error
2024-03-04 20:03:06 +08:00
FingerEngine, err = fingers.NewEngine()
2024-02-07 02:59:55 +08:00
if err != nil {
return err
}
2024-07-01 19:51:16 +08:00
for _, f := range FingerEngine.Fingers().HTTPFingers {
2024-02-07 02:59:55 +08:00
for _, rule := range f.Rules {
if rule.SendDataStr != "" {
ActivePath = append(ActivePath, rule.SendDataStr)
}
}
}
2024-07-01 19:51:16 +08:00
for _, f := range FingerEngine.FingerPrintHub().FingerPrints {
2024-03-04 20:03:06 +08:00
if f.Path != "/" {
ActivePath = append(ActivePath, f.Path)
}
}
2024-07-17 01:40:30 +08:00
return nil
}
2024-02-07 02:59:55 +08:00
2024-07-17 01:40:30 +08:00
func LoadTemplates() error {
var err error
2024-02-07 02:59:55 +08:00
// load rule
2024-08-26 01:32:11 +08:00
2025-02-23 00:02:20 +08:00
err = yaml.Unmarshal(LoadConfig("spray_rule"), &Rules)
2024-02-07 02:59:55 +08:00
if err != nil {
return err
}
2024-08-26 01:32:11 +08:00
// load default words
var dicts map[string]string
2025-02-23 00:02:20 +08:00
err = yaml.Unmarshal(LoadConfig("spray_dict"), &dicts)
2024-08-26 01:32:11 +08:00
if err != nil {
return err
}
for name, wordlist := range dicts {
2024-08-26 02:22:35 +08:00
dict := strings.Split(strings.TrimSpace(wordlist), "\n")
for i, d := range dict {
dict[i] = strings.TrimSpace(d)
}
Dicts[strings.TrimSuffix(name, ".txt")] = dict
2024-02-07 02:59:55 +08:00
}
// load mask
var keywords map[string]interface{}
2025-02-23 00:02:20 +08:00
err = yaml.Unmarshal(LoadConfig("spray_common"), &keywords)
2024-02-07 02:59:55 +08:00
if err != nil {
return err
}
for k, v := range keywords {
t := make([]string, len(v.([]interface{})))
for i, vv := range v.([]interface{}) {
t[i] = iutils.ToString(vv)
}
mask.SpecialWords[k] = t
}
var extracts []*parsers.Extractor
2025-02-23 00:02:20 +08:00
err = yaml.Unmarshal(LoadConfig("extract"), &extracts)
2024-02-07 02:59:55 +08:00
if err != nil {
return err
}
for _, extract := range extracts {
extract.Compile()
ExtractRegexps[extract.Name] = []*parsers.Extractor{extract}
for _, tag := range extract.Tags {
if _, ok := ExtractRegexps[tag]; !ok {
ExtractRegexps[tag] = []*parsers.Extractor{extract}
} else {
ExtractRegexps[tag] = append(ExtractRegexps[tag], extract)
}
}
}
return nil
}
2024-02-20 19:12:05 +08:00
func LoadExtractorConfig(filename string) ([]*parsers.Extractor, error) {
var extracts []*parsers.Extractor
content, err := os.ReadFile(filename)
if err != nil {
return nil, err
}
err = yaml.Unmarshal(content, &extracts)
if err != nil {
return nil, err
}
for _, extract := range extracts {
extract.Compile()
}
return extracts, nil
}
2024-03-04 20:03:06 +08:00
func Load() error {
2024-07-17 01:40:30 +08:00
err := LoadPorts()
if err != nil {
2025-02-23 00:02:20 +08:00
return fmt.Errorf("load ports, %w", err)
2024-07-17 01:40:30 +08:00
}
err = LoadTemplates()
2024-02-20 18:25:43 +08:00
if err != nil {
2025-02-23 00:02:20 +08:00
return fmt.Errorf("load templates, %w", err)
2024-02-20 18:25:43 +08:00
}
2024-07-17 01:40:30 +08:00
2024-02-20 18:25:43 +08:00
return nil
}