wappalyzer

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 15, 2025 License: MIT Imports: 11 Imported by: 0

README

Wappalyzergo

A high performance port of the Wappalyzer Technology Detection Library to Go. Inspired by Webanalyze.

Uses data from https://github.com/AliasIO/wappalyzer

Features

  • Very simple and easy to use, with clean codebase.
  • Normalized regexes + auto-updating database of wappalyzer fingerprints.
  • Optimized for performance: parsing HTML manually for best speed.
Using go install
go install -v github.com/projectdiscovery/wappalyzergo/cmd/update-fingerprints@latest

After this command wappalyzergo library source will be in your current go.mod.

Example

Usage Example:

package main

import (
	"fmt"
	"io"
	"log"
	"net/http"

	wappalyzer "github.com/projectdiscovery/wappalyzergo"
)

func main() {
	resp, err := http.DefaultClient.Get("https://www.hackerone.com")
	if err != nil {
		log.Fatal(err)
	}
	data, _ := io.ReadAll(resp.Body) // Ignoring error for example

	wappalyzerClient, err := wappalyzer.New()
	fingerprints := wappalyzerClient.Fingerprint(resp.Header, data)
	fmt.Printf("%v\n", fingerprints)

	// Output: map[Acquia Cloud Platform:{} Amazon EC2:{} Apache:{} Cloudflare:{} Drupal:{} PHP:{} Percona:{} React:{} Varnish:{}]
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FormatAppVersion

func FormatAppVersion(app, version string) string

func GetCategoriesMapping

func GetCategoriesMapping() map[int]categoryItem

func GetFingerprints

func GetFingerprints() string

GetFingerprints returns the fingerprint string from wappalyzer

func GetRawFingerprints

func GetRawFingerprints() string

Types

type AppInfo

type AppInfo struct {
	Description string
	Website     string
	CPE         string
	Icon        string
	Categories  []string
}

AppInfo contains basic information about an App.

func AppInfoFromFingerprint

func AppInfoFromFingerprint(fingerprint *CompiledFingerprint) AppInfo

type CatsInfo

type CatsInfo struct {
	Cats []int
}

CatsInfo contains basic information about an App.

type CompiledFingerprint

type CompiledFingerprint struct {
	// contains filtered or unexported fields
}

CompiledFingerprint contains the compiled fingerprints from the tech json

func (*CompiledFingerprint) GetDOMRules

func (f *CompiledFingerprint) GetDOMRules() map[string]map[string]*ParsedPattern

func (*CompiledFingerprint) GetJSRules

func (f *CompiledFingerprint) GetJSRules() map[string]*ParsedPattern

type CompiledFingerprints

type CompiledFingerprints struct {
	// Apps is organized as <name, fingerprint>
	Apps map[string]*CompiledFingerprint
}

CompiledFingerprints contains a map of fingerprints for tech detection

type Fingerprint

type Fingerprint struct {
	Cats        []int                             `json:"cats"`
	CSS         []string                          `json:"css"`
	Cookies     map[string]string                 `json:"cookies"`
	Dom         map[string]map[string]interface{} `json:"dom"`
	JS          map[string]string                 `json:"js"`
	Headers     map[string]string                 `json:"headers"`
	HTML        []string                          `json:"html"`
	Script      []string                          `json:"scripts"`
	ScriptSrc   []string                          `json:"scriptSrc"`
	Meta        map[string][]string               `json:"meta"`
	Implies     []string                          `json:"implies"`
	Description string                            `json:"description"`
	Website     string                            `json:"website"`
	CPE         string                            `json:"cpe"`
	Icon        string                            `json:"icon"`
}

Fingerprint is a single piece of information about a tech validated and normalized

type Fingerprints

type Fingerprints struct {
	// Apps is organized as <name, fingerprint>
	Apps map[string]*Fingerprint `json:"apps"`
}

Fingerprints contains a map of fingerprints for tech detection

type ParsedPattern

type ParsedPattern struct {
	Confidence int
	Version    string
	SkipRegex  bool
	// contains filtered or unexported fields
}

ParsedPattern encapsulates a regular expression with additional metadata for confidence and version extraction.

func ParsePattern

func ParsePattern(pattern string) (*ParsedPattern, error)

ParsePattern extracts information from a pattern, supporting both regex and simple patterns

func (*ParsedPattern) Evaluate

func (p *ParsedPattern) Evaluate(target string) (bool, string)

type UniqueFingerprints

type UniqueFingerprints struct {
	// contains filtered or unexported fields
}

func NewUniqueFingerprints

func NewUniqueFingerprints() UniqueFingerprints

func (UniqueFingerprints) GetValues

func (u UniqueFingerprints) GetValues() map[string]struct{}

func (UniqueFingerprints) SetIfNotExists

func (u UniqueFingerprints) SetIfNotExists(value, version string, confidence int)

type Wappalyze

type Wappalyze struct {
	// contains filtered or unexported fields
}

Wappalyze is a client for working with tech detection

func New

func New() (*Wappalyze, error)

New creates a new tech detection instance

func NewFromFile

func NewFromFile(filePath string, loadEmbedded, supersede bool) (*Wappalyze, error)

NewFromFile creates a new tech detection instance from a file this allows using the latest fingerprints without recompiling the code loadEmbedded indicates whether to load the embedded fingerprints supersede indicates whether to overwrite the embedded fingerprints (if loaded) with the file fingerprints if the app name conflicts supersede is only used if loadEmbedded is true

func (*Wappalyze) Fingerprint

func (s *Wappalyze) Fingerprint(headers map[string][]string, body []byte) map[string]struct{}

Fingerprint identifies technologies on a target, based on the received response headers and body.

Body should not be mutated while this function is being called, or it may lead to unexpected things.

func (*Wappalyze) FingerprintWithCats

func (s *Wappalyze) FingerprintWithCats(headers map[string][]string, body []byte) map[string]CatsInfo

FingerprintWithCats identifies technologies on a target, based on the received response headers and body. It also returns categories information about the technology, is there's any Body should not be mutated while this function is being called, or it may lead to unexpected things.

func (*Wappalyze) FingerprintWithInfo

func (s *Wappalyze) FingerprintWithInfo(headers map[string][]string, body []byte) map[string]AppInfo

FingerprintWithInfo identifies technologies on a target, based on the received response headers and body. It also returns basic information about the technology, such as description and website URL as well as icon.

Body should not be mutated while this function is being called, or it may lead to unexpected things.

func (*Wappalyze) FingerprintWithTitle

func (s *Wappalyze) FingerprintWithTitle(headers map[string][]string, body []byte) (map[string]struct{}, string)

FingerprintWithTitle identifies technologies on a target, based on the received response headers and body. It also returns the title of the page.

Body should not be mutated while this function is being called, or it may lead to unexpected things.

func (*Wappalyze) GetCompiledFingerprints

func (s *Wappalyze) GetCompiledFingerprints() *CompiledFingerprints

GetCompiledFingerprints returns the compiled fingerprints

func (*Wappalyze) GetFingerprints

func (s *Wappalyze) GetFingerprints() *Fingerprints

GetFingerprints returns the original fingerprints

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL