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.

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)

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.