AIMAP(1)

NAME
aimap - AI infrastructure scanner: find exposed LLMs, vector databases, and ML services

SYNOPSIS
aimap [-target IP|HOSTNAME|CIDR] [-list FILE] [-ports LIST] [-threads N] [-timeout DURATION] [-o FILE] [-v]

DESCRIPTION
aimap is a purpose-built scanner for AI and machine learning infrastructure. Where nmap(1) and nuclei(1) identify that a service is running, aimap identifies which AI/ML service is running and whether it is exposing data, PII, credentials, or compute.

aimap is intended for defensive use: security teams running it against their own networks to discover shadow AI deployments, audit exposure before attackers do, and integrate AI-service checks into CI/CD deployment gates.

All probes are read-only HTTP GETs. aimap never writes, authenticates, or exploits. It is safe to run against production infrastructure you own.

SCANNING PIPELINE
aimap operates in three phases:

Phase 1 - Port discovery
    Parallel TCP connect scan across the specified ports. Default port list covers AI-service defaults including Ollama, Qdrant, ChromaDB, Milvus, MLflow, Jupyter, Ray, and Docker Registry on common non-standard ports.

Phase 2 - Service fingerprinting
    For each open port, aimap matches against 23 built-in AI/ML service fingerprints using path and body signatures.

Phase 3 - Deep enumeration
    Service-specific enumerators inspect schemas, collections, models, experiments, and configuration to surface actionable findings (PII fields, unauthenticated RCE, credential exposure).

OPTIONS

-target IP|HOSTNAME|CIDR
    Single target to scan. Accepts an IPv4 address, hostname, or CIDR block (e.g., 10.0.0.0/24).

-list FILE
    Path to a file containing targets, one per line. Lines starting with # are treated as comments and ignored.

-ports LIST
    Comma-separated list of ports to scan. Default: 8080,8443,11434,8000,3000,6333,19530,9091,8888,8501,9090,5000,5001,4000,7860,3001,8265,51000,55000

-threads N
    Number of concurrent scan goroutines. Default: 20. Internal-network scans typically benefit from 50-100. External scans should stay at 10-20 to avoid tripping rate limits or alerting.

-timeout DURATION
    Per-connection timeout. Default: 5s. Reduce to 2-3s on low-latency internal networks; increase to 10s for external scans.

-o FILE
    Write a full JSON report to FILE. Machine-readable output suitable for CI/CD integration or diffing across scans.

-v  Verbose output. Shows per-host match reasoning, which helps interpret unexpected findings.

SUPPORTED SERVICES
aimap v1.1 fingerprints 23 AI/ML service types across six categories:

Vector databases
    Weaviate, ChromaDB, Qdrant, Milvus

LLM runtimes
    Ollama, vLLM, LocalAI, text-generation-webui

ML platforms
    MLflow, TensorFlow Serving, Triton Inference Server, Ray Serve, Ray Dashboard, Kubeflow

Orchestration and UI
    LangServe, Flowise, Dify, Open WebUI, LiteLLM, BentoML

Observability
    Langfuse

Notebooks and adjacent
    Jupyter Notebook, Docker Registry

RISK LEVELS
aimap computes a risk level per service based on findings:

critical
    Exploitable now, no authentication required. Examples: unauthenticated Jupyter code execution, exposed Flowise credentials endpoint, Dify with unclaimed admin account.

high
    Sensitive data accessible without authentication. Examples: vector database with PII fields exposed, Langfuse trace data readable, MLflow experiments accessible.

medium
    Information disclosure or misconfiguration. Examples: version leaks, CORS misconfiguration, service identified with empty data.

low Service detected with minor issues. Examples: header disclosure.

info
    Service identified, authentication in place, no actionable findings.

Escalation rule: if authentication status is none and any finding is high, the overall risk is promoted to critical.

EXAMPLES

Scan a single internal host for AI services:
    aimap -target 10.1.2.3 -v

Audit an entire internal /16 for shadow AI deployments:
    aimap -target 10.0.0.0/16 -threads 100 -timeout 3s -o audit.json

Check a list of public-facing hosts for AI exposure:
    aimap -list public-ips.txt -threads 10 -timeout 10s -o external.json -v

CI/CD deployment gate (fail build on critical findings):
    aimap -target $DEPLOY_URL -o check.json && jq '.enum_results[] | select(.risk_level == critical )' check.json

Investigate a single suspected host with wide port coverage:
    aimap -target 10.5.5.5 -v -ports 8000,8080,8443,8888,9091,11434,6333,19530,5000,3000,7860,4000,51000,55000

OUTPUT
aimap prints a color-coded terminal summary showing open ports, identified services, per-service findings, and an overall risk assessment.

With -o, a complete JSON report is written containing:

•   Scan metadata (target, duration, ports scanned)

•   Open ports with banner data

•   Identified services with version and match details

•   Deep enumeration results per service

•   Findings with severity, category, and remediation-relevant context

•   Aggregate summary counts

AUTHORIZATION
aimap performs active scanning (TCP connections and HTTP probes). Only run it against systems you own or have explicit written authorization to test. Unauthorized scanning of third-party infrastructure may violate local computer-misuse laws.

For passive reconnaissance of external targets, use dedicated OSINT tools instead (Shodan, Censys, Certificate Transparency logs).

FILES
No configuration files. All options are controlled via command-line flags.

EXIT STATUS

0   Scan completed successfully (findings may still be present; check output).

1   Invalid arguments or failure opening target list file.

SEE ALSO
nmap(1), nuclei(1), masscan(1)

AUTHOR
Written by Nicholas Kloster (NuClide).

REPORTING BUGS
Report issues at https://github.com/Nicholas-Kloster/aimap/issues.

COPYRIGHT
Copyright © 2026 Nicholas Kloster. Licensed under the MIT License.