shadow1ng/fscan · error

fingerprint_enhanced_parse_failed

fingerprint_enhanced_parse_failed

Error message

fingerprint_enhanced_parse_failed: %w

What it means

Guard in LoadEnhancedFingerprints: json.Unmarshal of the embedded fingerprint-hub data into []*EnhancedFingerprint failed. The bundled fingerprint database is malformed or structurally incompatible with the struct definitions, so the enhanced fingerprint engine cannot initialize.

Solutions

  1. Validate the embedded fingerprint JSON against the EnhancedFingerprint schema
  2. Update struct tags to match the upstream fingerprint-hub format
  3. Re-embed a known-good copy of the fingerprint data
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at webscan/fingerprint/enhanced.go:61 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06). Data as JSON: /api/errors/eeb38d47dcc58eab. Report an issue: GitHub.

Appendix: source

Thrown at webscan/fingerprint/enhanced.go:61

	} `json:"http"`
}

// EnhancedFingerprintDB 增强指纹数据库
type EnhancedFingerprintDB struct {
	Fingerprints []*EnhancedFingerprint
	regexCache   sync.Map // pattern → *regexp.Regexp,无锁并发安全
}

var (
	enhancedDB     *EnhancedFingerprintDB
	enhancedDBOnce sync.Once // 保证只初始化一次
)

// LoadEnhancedFingerprints 加载增强指纹库
func LoadEnhancedFingerprints() error {
	var fps []*EnhancedFingerprint
	if err := json.Unmarshal(fingerprintHubData, &fps); err != nil {
		return fmt.Errorf("%s: %w", i18n.GetText("fingerprint_enhanced_parse_failed"), err)
	}

	// 预处理:CaseInsensitive 的 matcher 预先小写化 Words,避免匹配时重复分配
	for _, fp := range fps {
		for hi := range fp.HTTP {
			for mi := range fp.HTTP[hi].Matchers {
				m := &fp.HTTP[hi].Matchers[mi]
				if m.CaseInsensitive && m.Type == "word" {
					for wi, w := range m.Words {
						m.Words[wi] = strings.ToLower(w)
					}
				}
			}
		}
	}

	enhancedDB = &EnhancedFingerprintDB{
		Fingerprints: fps,

View on GitHub (pinned to 95cc12e753)