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  }