github.com/chainreactors/fingers@v1.2.1/favicon/favicon.go (about) 1 package favicon 2 3 import ( 4 "github.com/chainreactors/fingers/common" 5 "github.com/chainreactors/utils/encode" 6 ) 7 8 func NewFavicons() *FaviconsEngine { 9 return &FaviconsEngine{ 10 Md5Fingers: make(map[string]string), 11 Mmh3Fingers: make(map[string]string), 12 } 13 } 14 15 type FaviconsEngine struct { 16 Md5Fingers map[string]string 17 Mmh3Fingers map[string]string 18 } 19 20 func (engine *FaviconsEngine) Compile() error { 21 return nil 22 } 23 24 func (engine *FaviconsEngine) Name() string { 25 return "favicon" 26 } 27 28 func (engine *FaviconsEngine) Len() int { 29 return len(engine.Md5Fingers) + len(engine.Mmh3Fingers) 30 } 31 32 func (engine *FaviconsEngine) HashMatch(md5, mmh3 string) *common.Framework { 33 if engine.Md5Fingers[md5] != "" { 34 return common.NewFramework(engine.Md5Fingers[md5], common.FrameFromICO) 35 } 36 37 if engine.Mmh3Fingers[mmh3] != "" { 38 return common.NewFramework(engine.Mmh3Fingers[mmh3], common.FrameFromICO) 39 } 40 return nil 41 } 42 43 // WebMatch 实现Web指纹匹配 44 func (engine *FaviconsEngine) WebMatch(content []byte) common.Frameworks { 45 md5h := encode.Md5Hash(content) 46 mmh3h := encode.Mmh3Hash32(content) 47 fs := make(common.Frameworks) 48 fs.Add(engine.HashMatch(md5h, mmh3h)) 49 return fs 50 } 51 52 // ServiceMatch 实现Service指纹匹配 - favicon不支持Service指纹 53 func (engine *FaviconsEngine) ServiceMatch(host string, portStr string, level int, sender common.ServiceSender, callback common.ServiceCallback) *common.ServiceResult { 54 // favicon不支持Service指纹识别 55 return nil 56 } 57 58 func (engine *FaviconsEngine) Capability() common.EngineCapability { 59 return common.EngineCapability{ 60 SupportWeb: true, // favicon支持Web指纹(特定的favicon指纹) 61 SupportService: false, // favicon不支持Service指纹 62 } 63 }