# Wappalyzer Next
This project is a command line tool and python library that uses [Wappalyzer](https://www.wappalyzer.com/) extension (and its fingerprints) to detect technologies. Other projects emerged after discontinuation of the official open source project are using outdated fingerpints and lack accuracy when used on dynamic web-apps, this project bypasses those limitations.
- [Installation](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#installation)
- [For Users](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#for-users)
- [For Developers](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#for-developers)
- [FAQ](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#faq)
## Installation
Before installing wappalyzer, you will to install [Firefox](https://www.mozilla.org/en-US/firefox/windows/) and [geckodriver](https://github.com/mozilla/geckodriver/releases). Below are detailed steps for setting up geckodriver but you may use google/youtube for help.
<details>
<summary>Setting up geckodriver</summary>
### Step 1: Download GeckoDriver
1. Visit the official GeckoDriver releases page on GitHub:
[https://github.com/mozilla/geckodriver/releases](https://github.com/mozilla/geckodriver/releases)
2. Download the version compatible with your system:
- For Windows: `geckodriver-vX.XX.X-win64.zip`
- For macOS: `geckodriver-vX.XX.X-macos.tar.gz`
- For Linux: `geckodriver-vX.XX.X-linux64.tar.gz`
3. Extract the downloaded file to a folder of your choice.
### Step 2: Add GeckoDriver to the System Path
To ensure Selenium can locate the GeckoDriver executable:
- **Windows**:
1. Move the `geckodriver.exe` to a directory (e.g., `C:\WebDrivers\`).
2. Add this directory to the system's PATH:
- Open **Environment Variables**.
- Under **System Variables**, find and select the `Path` variable, then click **Edit**.
- Click **New** and enter the directory path where `geckodriver.exe` is stored.
- Click **OK** to save.
- **macOS/Linux**:
1. Move the `geckodriver` file to `/usr/local/bin/` or another directory in your PATH.
2. Use the following command in the terminal:
```bash
sudo mv geckodriver /usr/local/bin/
```
Ensure `/usr/local/bin/` is in your PATH.
</details>
#### Install as a command-line tool
```bash
pipx install wappalyzer
```
#### Install as a library
To use it as a library, install it with `pip` inside an isolated container e.g. `venv` or `docker`. You may also `--break-system-packages` to do a 'regular' install but it is not recommended.
#### Install with docker
<details><summary>Steps</summary>
1. Clone the repository:
```bash
git clone https://github.com/s0md3v/wappalyzer-next.git
cd wappalyzer-next
```
2. Build and run with Docker Compose:
```bash
docker compose up -d
```
3. To scan URLs using the Docker container:
- Scan a single URL:
```bash
docker compose run --rm wappalyzer -i https://example.com
```
- Scan Multiple URLs from a file:
```bash
docker compose run --rm wappalyzer -i https://example.com -oJ output.json
```
</details>
## For Users
Some common usage examples are given below, refer to list of all options for more information.
- Scan a single URL:
`wappalyzer -i https://example.com`
- Scan multiple URLs from a file: `wappalyzer -i urls.txt -t 10`
- Scan with authentication: `wappalyzer -i https://example.com -c "sessionid=abc123; token=xyz789"`
- Export results to JSON: `wappalyzer -i https://example.com -oJ results.json`
#### Options
> Note: For accuracy use 'full' scan type (default). 'fast' and 'balanced' do not use browser emulation.
- `-i`: Input URL or file containing URLs (one per line)
- `--scan-type`: Scan type (default: 'full')
- `fast`: Quick HTTP-based scan (sends 1 request)
- `balanced`: HTTP-based scan with more requests
- `full`: Complete scan using wappalyzer extension
- `-t, --threads`: Number of concurrent threads (default: 5)
- `-oJ`: JSON output file path
- `-oC`: CSV output file path
- `-c, --cookie`: Cookie header string for authenticated scans
## For Developers
The python library is a available on pypi as `wappalyzer` and can be imported with the same name.
#### Using the Library
The main function you'll interact with is `analyze()`:
```python
from wappalyzer import analyze
# Basic usage
results = analyze('https://example.com')
# With options
results = analyze(
url='https://example.com',
scan_type='full', # 'fast', 'balanced', or 'full'
threads=3,
cookie='sessionid=abc123'
)
```
#### analyze() Function Parameters
- `url` (str): The URL to analyze
- `scan_type` (str, optional): Type of scan to perform
- `'fast'`: Quick HTTP-based scan
- `'balanced'`: HTTP-based scan with more requests
- `'full'`: Complete scan including JavaScript execution (default)
- `threads` (int, optional): Number of threads for parallel processing (default: 3)
- `cookie` (str, optional): Cookie header string for authenticated scans
#### Return Value
Returns a dictionary with the URL as key and detected technologies as value:
```json
{
"https://github.com": {
"Amazon S3": {"version": "", "confidence": 100, "categories": ["CDN"], "groups": ["Servers"]},
"lit-html": {"version": "1.1.2", "confidence": 100, "categories": ["JavaScript libraries"], "groups": ["Web development"]},
"React Router": {"version": "6", "confidence": 100, "categories": ["JavaScript frameworks"], "groups": ["Web development"]},
"https://google.com" : {},
"https://example.com" : {},
}}
```
### FAQ
#### Why use Firefox instead of Chrome?
Firefox extensions are .xpi files which are essentially zip files. This makes it easier to extract data and slightly modify the extension to make this tool work.
#### What is the difference between 'fast', 'balanced', and 'full' scan types?
- **fast**: Sends a single HTTP request to the URL. Doesn't use the extension.
- **balanced**: Sends additional HTTP requests to .js files, /robots.txt annd does DNS queries. Doesn't use the extension.
- **full**: Uses the official Wappalyzer extension to scan the URL in a headless browser.
Raw data
{
"_id": null,
"home_page": "https://github.com/s0md3v/wappalyzer-next",
"name": "wappalyzer",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "wappalyzer, bug bounty, pentesting, security",
"author": "Somdev Sangwan",
"author_email": "s0md3v@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/aa/5e/9ac9641662ca4a38bc469b17896d8e9f767dd04d908f3905636f81577e50/wappalyzer-1.0.9.tar.gz",
"platform": null,
"description": "# Wappalyzer Next\n\nThis project is a command line tool and python library that uses [Wappalyzer](https://www.wappalyzer.com/) extension (and its fingerprints) to detect technologies. Other projects emerged after discontinuation of the official open source project are using outdated fingerpints and lack accuracy when used on dynamic web-apps, this project bypasses those limitations.\n\n- [Installation](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#installation)\n- [For Users](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#for-users)\n- [For Developers](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#for-developers)\n- [FAQ](https://github.com/s0md3v/wappalyzer-next?tab=readme-ov-file#faq)\n\n## Installation\n\nBefore installing wappalyzer, you will to install [Firefox](https://www.mozilla.org/en-US/firefox/windows/) and [geckodriver](https://github.com/mozilla/geckodriver/releases). Below are detailed steps for setting up geckodriver but you may use google/youtube for help.\n<details>\n<summary>Setting up geckodriver</summary>\n\n### Step 1: Download GeckoDriver\n1. Visit the official GeckoDriver releases page on GitHub: \n [https://github.com/mozilla/geckodriver/releases](https://github.com/mozilla/geckodriver/releases)\n2. Download the version compatible with your system:\n - For Windows: `geckodriver-vX.XX.X-win64.zip`\n - For macOS: `geckodriver-vX.XX.X-macos.tar.gz`\n - For Linux: `geckodriver-vX.XX.X-linux64.tar.gz`\n3. Extract the downloaded file to a folder of your choice.\n\n### Step 2: Add GeckoDriver to the System Path\nTo ensure Selenium can locate the GeckoDriver executable:\n- **Windows**:\n 1. Move the `geckodriver.exe` to a directory (e.g., `C:\\WebDrivers\\`).\n 2. Add this directory to the system's PATH:\n - Open **Environment Variables**.\n - Under **System Variables**, find and select the `Path` variable, then click **Edit**.\n - Click **New** and enter the directory path where `geckodriver.exe` is stored.\n - Click **OK** to save.\n- **macOS/Linux**:\n 1. Move the `geckodriver` file to `/usr/local/bin/` or another directory in your PATH.\n 2. Use the following command in the terminal:\n ```bash\n sudo mv geckodriver /usr/local/bin/\n ```\n Ensure `/usr/local/bin/` is in your PATH.\n</details>\n\n\n#### Install as a command-line tool\n```bash\npipx install wappalyzer\n```\n\n#### Install as a library\nTo use it as a library, install it with `pip` inside an isolated container e.g. `venv` or `docker`. You may also `--break-system-packages` to do a 'regular' install but it is not recommended.\n\n#### Install with docker\n<details><summary>Steps</summary>\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/s0md3v/wappalyzer-next.git\ncd wappalyzer-next\n```\n\n2. Build and run with Docker Compose:\n```bash\ndocker compose up -d\n```\n\n3. To scan URLs using the Docker container:\n\n- Scan a single URL:\n```bash\ndocker compose run --rm wappalyzer -i https://example.com\n```\n- Scan Multiple URLs from a file:\n```bash\ndocker compose run --rm wappalyzer -i https://example.com -oJ output.json\n```\n</details>\n\n## For Users\nSome common usage examples are given below, refer to list of all options for more information.\n\n- Scan a single URL:\n`wappalyzer -i https://example.com`\n- Scan multiple URLs from a file: `wappalyzer -i urls.txt -t 10`\n- Scan with authentication: `wappalyzer -i https://example.com -c \"sessionid=abc123; token=xyz789\"`\n- Export results to JSON: `wappalyzer -i https://example.com -oJ results.json`\n\n#### Options\n\n> Note: For accuracy use 'full' scan type (default). 'fast' and 'balanced' do not use browser emulation.\n\n- `-i`: Input URL or file containing URLs (one per line)\n- `--scan-type`: Scan type (default: 'full')\n - `fast`: Quick HTTP-based scan (sends 1 request)\n - `balanced`: HTTP-based scan with more requests\n - `full`: Complete scan using wappalyzer extension\n- `-t, --threads`: Number of concurrent threads (default: 5)\n- `-oJ`: JSON output file path\n- `-oC`: CSV output file path\n- `-c, --cookie`: Cookie header string for authenticated scans\n\n## For Developers\n\nThe python library is a available on pypi as `wappalyzer` and can be imported with the same name.\n\n#### Using the Library\n\nThe main function you'll interact with is `analyze()`:\n\n```python\nfrom wappalyzer import analyze\n\n# Basic usage\nresults = analyze('https://example.com')\n\n# With options\nresults = analyze(\n url='https://example.com',\n scan_type='full', # 'fast', 'balanced', or 'full'\n threads=3,\n cookie='sessionid=abc123'\n)\n```\n\n#### analyze() Function Parameters\n\n- `url` (str): The URL to analyze\n- `scan_type` (str, optional): Type of scan to perform\n - `'fast'`: Quick HTTP-based scan\n - `'balanced'`: HTTP-based scan with more requests\n - `'full'`: Complete scan including JavaScript execution (default)\n- `threads` (int, optional): Number of threads for parallel processing (default: 3)\n- `cookie` (str, optional): Cookie header string for authenticated scans\n\n#### Return Value\n\nReturns a dictionary with the URL as key and detected technologies as value:\n\n```json\n{\n \"https://github.com\": {\n \"Amazon S3\": {\"version\": \"\", \"confidence\": 100, \"categories\": [\"CDN\"], \"groups\": [\"Servers\"]},\n \"lit-html\": {\"version\": \"1.1.2\", \"confidence\": 100, \"categories\": [\"JavaScript libraries\"], \"groups\": [\"Web development\"]},\n \"React Router\": {\"version\": \"6\", \"confidence\": 100, \"categories\": [\"JavaScript frameworks\"], \"groups\": [\"Web development\"]},\n \"https://google.com\" : {},\n \"https://example.com\" : {},\n}}\n```\n\n### FAQ\n\n#### Why use Firefox instead of Chrome?\nFirefox extensions are .xpi files which are essentially zip files. This makes it easier to extract data and slightly modify the extension to make this tool work.\n\n#### What is the difference between 'fast', 'balanced', and 'full' scan types?\n- **fast**: Sends a single HTTP request to the URL. Doesn't use the extension.\n- **balanced**: Sends additional HTTP requests to .js files, /robots.txt annd does DNS queries. Doesn't use the extension.\n- **full**: Uses the official Wappalyzer extension to scan the URL in a headless browser.\n",
"bugtrack_url": null,
"license": "GNU General Public License v3",
"summary": "Wappalyzer-based tech stack detection library",
"version": "1.0.9",
"project_urls": {
"Download": "https://github.com/s0md3v/wappalyzer-next/archive/1.0.9.zip",
"Homepage": "https://github.com/s0md3v/wappalyzer-next"
},
"split_keywords": [
"wappalyzer",
" bug bounty",
" pentesting",
" security"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "aa5e9ac9641662ca4a38bc469b17896d8e9f767dd04d908f3905636f81577e50",
"md5": "bc2b2ec81071b33093863435a90fc187",
"sha256": "4d1ccbb8f8eae867dabf000ba4a89e40a54708cede76bbadd92391d3b6c885bd"
},
"downloads": -1,
"filename": "wappalyzer-1.0.9.tar.gz",
"has_sig": false,
"md5_digest": "bc2b2ec81071b33093863435a90fc187",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22755798,
"upload_time": "2024-12-26T12:52:26",
"upload_time_iso_8601": "2024-12-26T12:52:26.663051Z",
"url": "https://files.pythonhosted.org/packages/aa/5e/9ac9641662ca4a38bc469b17896d8e9f767dd04d908f3905636f81577e50/wappalyzer-1.0.9.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-26 12:52:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "s0md3v",
"github_project": "wappalyzer-next",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "wappalyzer"
}