mirror of
https://github.com/chainreactors/spray.git
synced 2025-05-07 19:16:26 +00:00
137 lines
2.7 KiB
Go
137 lines
2.7 KiB
Go
package pkg
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/chainreactors/fingers"
|
|
"github.com/chainreactors/parsers"
|
|
"github.com/chainreactors/utils"
|
|
"github.com/chainreactors/utils/iutils"
|
|
"github.com/chainreactors/words/mask"
|
|
"os"
|
|
yaml "sigs.k8s.io/yaml/goyaml.v3"
|
|
"strings"
|
|
)
|
|
|
|
func LoadPorts() error {
|
|
var err error
|
|
var ports []*utils.PortConfig
|
|
err = json.Unmarshal(LoadConfig("port"), &ports)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
utils.PrePort = utils.NewPortPreset(ports)
|
|
return nil
|
|
}
|
|
|
|
func LoadFingers() error {
|
|
var err error
|
|
FingerEngine, err = fingers.NewEngine()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, f := range FingerEngine.Fingers().HTTPFingers {
|
|
for _, rule := range f.Rules {
|
|
if rule.SendDataStr != "" {
|
|
ActivePath = append(ActivePath, rule.SendDataStr)
|
|
}
|
|
}
|
|
}
|
|
for _, f := range FingerEngine.FingerPrintHub().FingerPrints {
|
|
if f.Path != "/" {
|
|
ActivePath = append(ActivePath, f.Path)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func LoadTemplates() error {
|
|
var err error
|
|
// load rule
|
|
|
|
err = json.Unmarshal(LoadConfig("spray_rule"), &Rules)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// load default words
|
|
var dicts map[string]string
|
|
err = json.Unmarshal(LoadConfig("spray_dict"), &dicts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for name, wordlist := range dicts {
|
|
dict := strings.Split(strings.TrimSpace(wordlist), "\n")
|
|
for i, d := range dict {
|
|
dict[i] = strings.TrimSpace(d)
|
|
}
|
|
Dicts[strings.TrimSuffix(name, ".txt")] = dict
|
|
}
|
|
|
|
// load mask
|
|
var keywords map[string]interface{}
|
|
err = json.Unmarshal(LoadConfig("spray_common"), &keywords)
|
|
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
|
|
err = json.Unmarshal(LoadConfig("extract"), &extracts)
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
func Load() error {
|
|
err := LoadPorts()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = LoadTemplates()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|