Build a Website Tech Stack Scanner CLI in Go Using Wappalyzergo

Build a Website Tech Stack Scanner CLI in Go Using Wappalyzergo

A terminal scanner tells you what powers a website without opening a browser. For developers, security engineers, and automation builders, detecting a stack straight from the command line beats reading headers by hand or digging through HTML. A lightweight CLI does the whole job. This guide builds a fast website technology scanner in Go using ProjectDiscovery's open-source library. If you're new to detection, read our detecting website technologies using Go guide first. External resources: github.com/projectdiscovery/wappalyzergo projectdiscovery.io What we are building By the end of this tutorial you'll have a CLI that: accepts a target URL fetches the HTTP response detects technologies prints results in the terminal That's the same approach recon pipelines and developer tooling use as a foundation. Why build a CLI scanner? CLI tools are fast, scriptable, and drop into automation without the repetitive manual checks. Common uses: security reconnaissance attack surface discovery competitive research automation pipelines developer diagnostics For the concepts behind detection, our technology fingerprinting explained for developers article goes deeper. Step 1: Create the project Start by creating a new directory: mkdir tech-scanner-cli cd tech-scanner-cli Enter fullscreen mode Exit fullscreen mode Initialize a Go module: go mod init tech-scanner-cli Enter fullscreen mode Exit fullscreen mode Step 2: Install Wappalyzergo Run: go get github.com/projectdiscovery/wappalyzergo Enter fullscreen mode Exit fullscreen mode This pulls in the fingerprinting engine ProjectDiscovery maintains. Step 3: Write the CLI tool Create a main.go file and add the following code: package main import ( "flag" "fmt" "io" "log" "net/http" wappalyzer "github.com/projectdiscovery/wappalyzergo" ) var target = flag.String("url", "", "Target URL to scan") func main() { flag.Parse() if *target == "" { log.Fatal("Please provide a URL using -url") } resp, err := http.Get(*target) if err != nil { log.Fatalf("failed to fetch target: %v", err) } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { log.Fatalf("failed to read response: %v", err) } client, err := wappalyzer.New() if err != nil { log.Fatalf("failed to create client: %v", err) } technologies := client.Fingerprint(resp.Header, body) fmt.Println("Detected technologies:") for tech := range technologies { fmt.Println("-", tech) } } Enter fullscreen mode Exit fullscreen mode Step 4: Build the CLI Compile the binary: go build Enter fullscreen mode Exit fullscreen mode That drops an executable into your project directory. Step 5: Run the scanner ./tech-scanner-cli -url https://example.com Enter fullscreen mode Exit fullscreen mode Expected output: Detected technologies: - Cloudflare - React - Nginx Enter fullscreen mode Exit fullscreen mode That's a working detector in under 50 lines of Go. Optional: Install it globally To run the tool from anywhere: sudo cp tech-scanner-cli /usr/local/bin/ Enter fullscreen mode Exit fullscreen mode Then: tech-scanner-cli -url https://example.com Enter fullscreen mode Exit fullscreen mode Improve the CLI (recommended enhancements) Once the basic scanner works, add: Output formats JSON for automation CSV for reporting Concurrency Scan multiple targets at once. Timeout controls Stop slow sites from blocking scans. Category detection Use FingerprintWithCats to group technologies. Using custom fingerprints Wappalyzergo ships an embedded dataset, but you can load your own if you need to: client, err := wappalyzer.NewFromFile("fingerprints.json", true, true) Enter fullscreen mode Exit fullscreen mode That covers internal tooling or specialized detection without writing a matcher yourself. When should you use a CLI scanner? A terminal scanner earns its place when you're: running reconnaissance at scale automating security workflows integrating into CI pipelines building developer utilities For a tooling comparison, watch for our Wappalyzergo vs Wappalyzer guide. Conclusion You now have a fast, scriptable website technology scanner built entirely in Go. ProjectDiscovery's open-source libraries let developers wire reliable detection into their workflows without rebuilding the engine. If this guide was useful, the repository is worth a look: github.com/projectdiscovery/wappalyzergo projectdiscovery.io Next, detecting website technologies using Go explains the fingerprinting process behind the scanner. This article was originally published on ToolSura. For more on technology detection, read How Technology Detection Works and Technology Fingerprinting for Developers.

Original Source

Read the full article at Dev →

KhanList aggregates and links to publicly available news content. We do not host full articles from third-party sources. Always verify important information with original sources.