ScanMalware.com URL Scanner

com.scanmalware.mcp由 mcp.scanmalware.com 發布官方發布者v0.1.6更新於 Oct 24, 2026

MCP server for ScanMalware.com URL scanning, malware detection, and analysis.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取安全與監控

概覽

AI 產生的概覽

ScanMalware.com 的遠端 MCP 伺服器,讓助理提交網址進行沙箱掃描,並查詢掃描結果、判定與威脅情報資料。

可以做什麼
  • 提交網址進行沙箱瀏覽器掃描,並等待或追蹤掃描進度
  • 讀取掃描摘要、完整結果、AI 分析、判定結論與分析器狀態
  • 檢查 TLS 憑證、JARM 指紋、網頁技術、機器人防護、YARA 比對與剪貼簿事件
  • 依文字、網域、IP、ASN、favicon、JARM、OCR 文字、語意相似度或 AI 風險與詐騙類型檢索公開掃描檔案
  • 查詢網域、IP、ASN、favicon 與截圖統計及相似頁面比對
適用情境
適合釣魚網站研判、品牌濫用監控與可疑連結調查:讓助理掃描網址並彙整判定、指標與憑證資訊。也適合依網域、IP、favicon 或 OCR 文字檢索既有的公開掃描檔案。
執行需求
遠端 streamable HTTP 端點,無需本機安裝。伺服器若設定了 MCP_AUTH_TOKEN,則需提供 Authorization Bearer 權杖。私有可見性的掃描需要伺服器端設定 ScanMalware 帳戶權杖。需能連線至 ScanMalware。
安裝前請注意
提交掃描會把目標網址傳送給 ScanMalware,並可能被記錄於日誌。scan_type 為必填:public 會把網址與結果發布到公開動態並對搜尋引擎可見,unlisted 憑連結可存取,private 需帳戶權杖。對客戶或機密目標須審慎選擇可見性,失敗後不要改用更寬鬆的模式重試。部分彙總查詢最長可能耗時 90 秒。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 ScanMalware.com URL Scanner,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.scanmalware.mcp%2Fscanmalware-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "scanmalware-com-url-scanner": {
      "type": "http",
      "url": "https://mcp.scanmalware.com/mcp"
    }
  }
}

README

scanmalware-mcp

Minimal Python MCP server that wraps the public ScanMalware.com API.

Operations

See the operations runbook for deployment, TLS, logging, security maintenance, and how to connect to the DigitalOcean droplet.

Run locally (Streamable HTTP)

bash
python -m venv .venvsource .venv/bin/activatepip install -U pippip install .
export MCP_TRANSPORT=streamable-httpexport MCP_HOST=127.0.0.1export MCP_PORT=8000
scanmalware-mcp

Run with Docker

bash
docker build -t scanmalware-mcp .docker run --rm -p 127.0.0.1:8000:8000 \  -e MCP_TRANSPORT=streamable-http \  -e MCP_HOST=0.0.0.0 \  -e MCP_PORT=8000 \  scanmalware-mcp

Optional: set MCP_AUTH_TOKEN to require Authorization: Bearer <MCP_AUTH_TOKEN> for HTTP transports.

Optional auth env vars (only needed for auth-gated endpoints):

  • SCANMALWARE_BEARER_TOKEN

Other env vars:

  • SCANMALWARE_BASE_URL (default: https://scanmalware.com)
  • SCANMALWARE_ALLOW_HTTP (default: false)
  • SCANMALWARE_TIMEOUT_S (default: 30)
  • SCANMALWARE_SLOW_QUERY_TIMEOUT_S (default: 90; favicon and technology statistics, OCR text search, JS fingerprint similarity counts and behavioural signature search)
  • SCANMALWARE_MAX_DOWNLOAD_BYTES (default: 10485760)
  • SCANMALWARE_ALLOW_PRIVATE_TARGETS (default: false)
  • SCANMALWARE_CA_CERT (optional; path to a CA bundle for SSL bump)

MCP server security env vars:

  • MCP_AUTH_TOKEN (if set, HTTP transports require Authorization: Bearer <token>)
  • MCP_RESOURCE_SERVER_URL / MCP_ISSUER_URL (optional; only used when MCP_AUTH_TOKEN is set)

Transport note: the HTTP transports run stateless (stateless_http=True), so responses carry no mcp-session-id header. Clients must not require one. This keeps per-session state - and therefore memory - flat. Both MCP protocol generations are served: initialize (2024-11-05 to 2025-11-25) and server/discover (2026-07-28). Requests use POST; GET on /mcp returns 405 because the server offers no standalone SSE stream.

SSE transport: set MCP_TRANSPORT=sse, and optionally MCP_SSE_MOUNT_PATH to serve it under a path prefix.

Tool note: submit_scan does not call /api/v1/csrf-token; there is no CSRF token tool. Tool note: some upstream endpoints are disabled and excluded from the tool list (e.g., get_improvements, find_screenshot_duplicates, get_ai_stats, search_js_fingerprinter2_code_hash, search_js_segments_by_tlsh). Filters: every search tool can be called with its defaults. search_js_fingerprint_patterns applies has_eval=true when no pattern filter is given, because the API requires one; search_js_obfuscation and search_js_malware_families fall back to the API's own defaults. Score filters use the API's scales and are checked before the request: the AI risk score is 0-10, AI confidence 0-100, JS obfuscation scores 0-1 and the runtime JS risk score 0-100. OCR search requires at least three characters after trimming. Library lookups use detected identifiers from get_js_library_inventory; search_js_fingerprint_by_library accepts Next.js as an alias for the detected identifier nextjs.

Scan visibility

submit_scan requires scan_type; there is no default. A public scan puts the target URL and scan results in ScanMalware's public feed, visible to other users and search engines. Choose deliberately for client targets, confidential URLs, and security engagements:

  • public: publishes the scan. Use for these targets only with explicit approval to publish.
  • unlisted: excluded from public listings, but accessible to anyone with the direct link.
  • private: results are restricted to the authenticated ScanMalware account. Requires a valid SCANMALWARE_BEARER_TOKEN configured on the MCP server; MCP_AUTH_TOKEN only controls access to the MCP server and does not provide ScanMalware authentication.

If visibility has not already been specified for these targets, ask the user to choose unlisted or private before submitting. If submission fails, do not retry with a less restrictive visibility. These modes control scan visibility; requests still go to ScanMalware and may be recorded in server logs (see the MCP privacy policy). ScanMalware documents the visibility options in its privacy policy.

Example prompts

Phishing triage (submit → wait → summarize):

text
Submit an unlisted scan for https://example-login-update.com, wait for completion, andreturn status, risk_score, and the top indicators. If high risk, include theAI analysis and screenshot resource.

Brand abuse monitoring:

text
Search scans for "acme login" (limit 5). For each result, list scan_id,status, risk_score, and URL. Highlight anything marked high risk.

TLS/certificate inspection:

text
For scan_id 1234...abcd, fetch TLS details and the certificate PEM download.Summarize issuer, subject, validity dates, and SANs; flag mismatches.

Deploy to DigitalOcean (Debian + Docker + Nginx)

The deploy bundle lives in deploy/ and runs three containers:

  • mcp (this server, streamable HTTP on port 8000)
  • nginx (frontend on ports 80/443; redirects HTTP to HTTPS and proxies /mcp to the MCP server)
  • proxy (mitmproxy, checks ScanMalware destinations and logs upstream HTTP traffic)

Prereqs

  • doctl authenticated (doctl auth init)
  • SSH key uploaded to DigitalOcean (used by doctl compute droplet create)
  • DNS and Let's Encrypt certificates at the paths in HTTPS / TLS before starting Nginx

Create a small droplet in Germany (Frankfurt)

bash
DROPLET_NAME=scanmalware-mcp-smallREGION=fra1SIZE=s-1vcpu-2gbIMAGE=debian-12-x64SSH_KEYS=$(doctl compute ssh-key list --format ID --no-header | paste -sd, -)
doctl compute droplet create "$DROPLET_NAME" \  --region "$REGION" \  --size "$SIZE" \  --image "$IMAGE" \  --ssh-keys "$SSH_KEYS" \  --tag-name scanmalware-mcp \  --wait

Firewall (public HTTP/HTTPS + SSH)

bash
doctl compute firewall create \  --name scanmalware-mcp-fw \  --inbound-rules "protocol:tcp,ports:22,address:0.0.0.0/0,address:::0/0" \  --inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0,address:::0/0" \  --inbound-rules "protocol:tcp,ports:443,address:0.0.0.0/0,address:::0/0" \  --outbound-rules "protocol:icmp,ports:0,address:0.0.0.0/0,address:::0/0" \  --outbound-rules "protocol:tcp,ports:0,address:0.0.0.0/0,address:::0/0" \  --outbound-rules "protocol:udp,ports:0,address:0.0.0.0/0,address:::0/0" \  --droplet-ids <droplet-id>

Install Docker + compose on the droplet

Install Docker Engine and the Compose plugin from the official Docker apt repository. Use docker compose; the old Python docker-compose client is incompatible with current Docker Engine.

See the operations runbook for pinned builds and maintenance checks.

Upload and run

bash
# Package exactly one commit; a tar of the working tree also picks up untracked# files (.tools/, caches, egg-info) and uncommitted edits.git archive --format=tar.gz -o /tmp/scanmalware-mcp.tar.gz origin/mainscp -i /path/to/key /tmp/scanmalware-mcp.tar.gz root@<droplet-ip>:/tmp/ssh -i /path/to/key root@<droplet-ip> \  "mkdir -p /opt/scanmalware-mcp && tar -xzf /tmp/scanmalware-mcp.tar.gz -C /opt/scanmalware-mcp"

On a fresh host, follow TLS inspection to build the proxy and generate its CA before starting MCP and Nginx. Install the egress rules and Docker startup hook and log rotation as part of host setup.

Verify

bash
curl -I https://mcp.scanmalware.com/curl -sS -o /dev/null -w '%{http_code}\n' https://mcp.scanmalware.com/mcp

/ should return 200 from Nginx. /mcp returns 405 on GET, which is expected: the server offers no standalone SSE stream, so MCP requests use POST.

Smoke test (MCP initialize + tools/list)

bash
python - <<'PY'import jsonimport httpx
URL = "https://mcp.scanmalware.com/mcp"HEADERS = {    "accept": "application/json, text/event-stream",    "content-type": "application/json",}
init_payload = {    "jsonrpc": "2.0",    "id": 1,    "method": "initialize",    "params": {        "protocolVersion": "2025-06-18",        "capabilities": {},        "clientInfo": {"name": "mcp-smoke-test", "version": "0.1.0"},    },}
with httpx.Client(timeout=10) as client:    init_resp = client.post(URL, headers=HEADERS, json=init_payload)    init_resp.raise_for_status()    # Stateless deployments return no session header.    session_id = init_resp.headers.get("mcp-session-id")
    def extract_sse_data(text: str) -> dict:        for line in text.splitlines():            if line.startswith("data: "):                return json.loads(line[len("data: "):])        raise ValueError("No SSE data line found")
    init_message = extract_sse_data(init_resp.text)    protocol_version = init_message["result"]["protocolVersion"]
    headers = {**HEADERS, "mcp-protocol-version": protocol_version}    if session_id:        headers["mcp-session-id"] = session_id
    # Send initialized notification    client.post(        URL,        headers=headers,        json={"jsonrpc": "2.0", "method": "notifications/initialized"},    )
    tools_resp = client.post(        URL,        headers=headers,        json={"jsonrpc": "2.0", "id": 2, "method": "tools/list"},    )    tools_resp.raise_for_status()    tools_message = extract_sse_data(tools_resp.text)    tool_names = [tool["name"] for tool in tools_message["result"]["tools"]]
print("protocol_version:", protocol_version)print("tool_count:", len(tool_names))print("tools:", ", ".join(tool_names))PY

Redeploy / new deploys

Two common flows:

  1. In-place update (same droplet)
bash
# Package exactly one commit; a tar of the working tree also picks up untracked# files (.tools/, caches, egg-info) and uncommitted edits.git archive --format=tar.gz -o /tmp/scanmalware-mcp.tar.gz origin/mainscp -i /path/to/key /tmp/scanmalware-mcp.tar.gz root@<droplet-ip>:/tmp/ssh -i /path/to/key root@<droplet-ip> \  "bash /opt/scanmalware-mcp/deploy/redeploy.sh /tmp/scanmalware-mcp.tar.gz"

The redeploy script stops all three containers, replaces the files, and rebuilds and restarts every image (docker compose up -d --build), preserving the mitmproxy CA. It deletes files on the droplet that are not in git (everything outside logs/). If the script is not on the droplet yet, run the legacy tar + docker compose command once to install it.

Optional one-shot helper from the repo root (it packs the working tree, including uncommitted changes, rather than a commit):

bash
./deploy/push-redeploy.sh root@<droplet-ip> /path/to/key

To update only the MCP server with a few seconds of downtime, see Updating only the MCP server.

  1. Rolling deploy (new droplet)
  • Create a new droplet (steps above)
  • Deploy the same bundle
  • Switch DNS to the new IP
  • Destroy the old droplet when ready
bash
doctl compute droplet delete <old-droplet-id> --force

來源:README.md,提交 0ad36e7

工具

128

get_recent_scans

Get Recent Scans

List the most recent public scans, newest first (paginated with page and limit). Each row has the scan ID, URL, status, visibility and submission time. Unlisted and private scans are never included.

輸入參數pagelimit

submit_scan

Submit Scan

Submit a URL to ScanMalware to be rendered and analysed in a sandboxed browser; returns the new scan_id. scan_type is required and sets who can see the result: 'public' lists the URL and its results in the public feed, visible to anyone and to search engines; 'unlisted' keeps the scan out of public listings, but anyone with its link can open it; 'private' limits the result to the ScanMalware account of this server's SCANMALWARE_BEARER_TOKEN and is rejected when no token is configured. Wraps POST /api/v1/scan of the ScanMalware API, documented at https://scanmalware.com/api-docs.

輸入參數url必填optionsscan_type必填user_agent

get_scan_summary

Get Scan Summary

Get a compact summary of one scan: submitted URL, final URL after redirects, status, completion time and the security verdict (verdict text, risk level, confidence and risk factors). Useful as the first look at a scan; the verdict is empty for a few seconds after a scan completes. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

wait_for_scan

Wait For Scan

Wait for a submitted scan to finish by polling its status every poll_interval_s seconds, up to timeout_s seconds (default 180). Returns the final compact summary (URL, final URL, status, completion time and the security verdict), or the last known status with timeout set to true if the scan is still running. The security verdict is computed after the scan completes, usually within about a minute: until then verdict_pending is true and the verdict fields are empty, so a risk score of 0 is not yet a verdict. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填timeout_spoll_interval_s

get_scan_result

Get Scan Result

Get the full result document of one scan: URLs and redirects, page title, load times, links, network requests, IP addresses, JavaScript files, TLS, fuzzy hashes, screenshot hashes, favicon and the security verdict. The response is large; the compact summary is enough for a verdict. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

search_scans

Search Scans

Search the archive of public scans by text in the URL, domain or page title (paginated); q needs at least 3 characters and search_type narrows the match (default 'all'). Each result has the scan ID, URL, status, title, submission time and hosting ASN.

輸入參數q必填pagelimitsearch_type

get_ai_analysis

Get AI Analysis

Get the AI analysis of one scan: classification (LEGITIMATE to CONFIRMED_SCAM), scam type, risk score, confidence, impersonated brand and the key evidence behind it. The analysis is produced a few minutes after the scan completes and returns not found until then. It can disagree with the scanner's own security verdict. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_scan_progress

Get Scan Progress

Get the progress of a running scan: current step, total steps, step name, percentage and status. Useful for checking whether a scan has finished before reading its results. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_scan_ioc

Get Scan IOC

Check one scan against threat-intelligence indicator feeds: matching IP addresses and domains the page contacted, the threat types, and a summary of total and unique matches. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_tls_details

Get TLS Details

Get the TLS certificate the scanned site presented: subject, issuer, validity dates, whether it was valid or expired, and related details. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_tls_asn1

Get TLS ASN1

Get the raw ASN.1 structure of the TLS certificate from one scan, for detailed certificate inspection. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_technologies_by_scan

Get Technologies By Scan

List the web technologies detected on a scanned page (frameworks, CMS, CDN, analytics and so on), with versions where known. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_bot_protection

Get Bot Protection

Get the bot-protection and CAPTCHA services detected on a scanned page (for example Cloudflare Turnstile), with a detected flag. Phishing kits often use these to hide from scanners. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_yara_matches

Get YARA Matches

Get the YARA rule matches recorded for one scan, with the matching rules and a summary by severity and category. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_jarm_signatures

Get JARM Signatures

Get the JARM TLS server fingerprints measured for the hosts in one scan, with whether each matches a known signature. A shared JARM often points to the same server software or hosting platform, so it is a weak pivot on its own. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_analyzer_results

Get Analyzer Results

List which analysis modules ran for one scan (for example JavaScript fingerprinting and AI analysis), with each module's status, success flag and timing. Useful for checking why a result is missing. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_clipboard_events

Get Clipboard Events

Get the clipboard writes the page attempted while it was scanned, with the event count and whether collection ran. Empty with an explanatory note when the page wrote nothing. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_js_fingerprints

Get JS Fingerprints

List the JavaScript files a scanned page loaded, each with its fingerprint: hashes (SHA-256, SHA-1, MD5, normalized and fuzzy), size metrics, detected library and bundler. The include_* options add function lists, HTTP headers or ML vector details. Useful for collecting script hashes to search for elsewhere. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填include_functionsinclude_http_headersinclude_vectors_info

get_scan_reports

Get Scan Reports

List the user reports and votes filed about one scan (for example marked safe or malicious), with the total count; report_type filters by kind. Empty when nobody has reported the scan. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填report_type

get_domain_scans

Get Domain Scans

List the recent scans of a domain and its subdomains, newest first, up to limit; status filters by scan status. Each row has matched_on: 'url' when the scan was submitted for a host under this domain, and only 'final_url' when another site redirected there. A verdict on a final_url-only row belongs to the submitted host, not to this domain.

輸入參數limitdomain必填status

get_domain_history

Get Domain History

Get the scan history of a domain with the total count and the scans, paginated with page and limit.

輸入參數pagelimitdomain必填

get_domain_stats

Get Domain Stats

Get scan counts for a domain: total, unique, completed and failed scans, first and latest scan, and scans in the last 24 hours, 7 days and 30 days.

輸入參數domain必填

search_by_ip

Search By IP

List scans of pages served from an IP address (paginated), each with scan ID, URL and time. On shared hosting and CDNs an IP serves many unrelated sites, so a match is not evidence of a connection.

輸入參數pagelimitip_address必填

get_ip_stats

Get IP Stats

Get statistics for an IP address across the archive: total scans, unique URLs, first and last seen, geolocation, ASN and organisation, BGP and DNS data; paginated.

輸入參數pagelimitip_address必填

search_by_asn

Search By ASN

Get what the archive knows about an autonomous system (ASN number, without 'AS'): organisation, total scans, unique URLs, first and last seen and BGP prefixes; paginated.

輸入參數pagelimitasn_number必填

search_similar_scans

Search Similar Scans

Find scans that look like this one by screenshot similarity, favicon or fuzzy page hash (methods, default screenshot), each with URL, final URL, title and what it matched by; paginated. Useful for finding copies of a phishing page on other hosts. scan_id is the UUID of a ScanMalware scan.

輸入參數pagelimitmethodsscan_id必填

search_semantic

Search Semantic

Search scans by meaning rather than exact words, comparing the query with scanned page content (for example 'bank login page asking for card details'). threshold (default 0.7) is the minimum similarity; an empty result means nothing was similar enough.

輸入參數pagelimitquery必填threshold

search_by_favicon

Search By Favicon

Search scans by favicon hash (paginated): a mmh3 hash by default, or the favicon's MD5 with hash_type='md5'.

輸入參數pagelimithash_typehash_value必填

search_ai_high_risk

Search AI High Risk

List scans that the AI analysis rated high risk, optionally above min_risk_score and min_confidence, each with URL, title and the analysis. min_risk_score is on the AI's 0-10 risk scale (default 7) and min_confidence is a 0-100 percentage (default 70).

輸入參數limitmin_confidencemin_risk_score

search_ai_scam_type

Search AI Scam Type

List scans whose AI analysis named a given scam type, such as 'Phishing', each with URL, title, submission time and the analysis (verdict, classification, risk score). The match is on the scam type text the analysis produced.

輸入參數limitscam_type必填

search_ai_classification

Search AI Classification

List scans whose AI analysis gave a specific classification: LEGITIMATE, LOW_RISK, MODERATE_RISK, HIGH_RISK or CONFIRMED_SCAM. Each result has the URL, title, submission time and the analysis.

輸入參數limitclassification必填

get_analyzer_stats

Get Analyzer Stats

Get platform-wide statistics for the scan analysis modules: the modules and their run counts. Describes the service, not a particular scan.

無需輸入參數。

search_analyzer_high_risk

Search Analyzer High Risk

List scans that the security analyzer scored as high risk, highest first (paginated), each with URL, risk score, verdict, confidence and analysis time. min_risk_score raises the threshold.

輸入參數pagelimitmin_risk_score

get_favicon

Get Favicon

Get the favicon recorded for a scan_id: its size, MD5 and SHA-256 hashes, and the image base64-encoded. found is false when no favicon is stored for the scan.

輸入參數scan_id必填

get_favicon_stats

Get Favicon Stats

Get favicon statistics across the archive: total favicons, those seen in the last 24 hours and the most common hashes with sample URLs. This aggregate query can take up to 90 seconds by default.

無需輸入參數。

get_screenshot_stats

Get Screenshot Stats

Get screenshot statistics across the archive: total screenshots, hash coverage and the distribution of perceptual hash types.

無需輸入參數。

search_similar_screenshots

Search Similar Screenshots

Find screenshots within max_distance (Hamming distance, default 3) of an integer perceptual hash (hash_type, default phash), each with scan, URL, title, distance and similarity score.

輸入參數limithash_typehash_value必填max_distance

search_ocr

Search OCR

Search OCR text (paginated). q must contain at least 3 characters after trimming. This query can take up to 90 seconds by default.

輸入參數q必填pagelimit

search_ocr_pattern

Search OCR Pattern

Search the text read by OCR from scan screenshots for a pattern (paginated); case_sensitive controls matching. Useful for finding pages that show the same lure text as an image.

輸入參數pagelimitpattern必填case_sensitive

search_by_jarm

Search By JARM

List scans whose server presented this JARM TLS fingerprint (paginated). Large hosting platforms share JARMs across many unrelated sites, so check what the matches have in common.

輸入參數pagelimitjarm_signature必填

search_by_fuzzy_hash

Search By Fuzzy Hash

List scans whose page content has a similar fuzzy hash (hash_type tlsh, ssdeep or sdhash; the value comes from a scan result), each with URL, title and time; paginated. Useful for finding near-identical copies of a page.

輸入參數pagelimithash_type必填hash_value必填

search_by_screenshot_hash

Search By Screenshot Hash

List scans whose screenshot has this perceptual hash (hash_type ahash, phash, dhash, whash, color_hash or crop_resistant), optionally within similarity_threshold, each with URL, title and time; paginated. Useful for finding pages that look the same.

輸入參數pagelimithash_type必填hash_value必填similarity_threshold

search_suspicious_clipboard

Search Suspicious Clipboard

List scans where the page wrote suspicious content to the clipboard (for example PowerShell commands), each with URL, event count, reason and time; pattern filters the content; paginated.

輸入參數pagelimitpattern

get_recent_threats

Get Recent Threats

List malware threats detected in scans during the last hours (default window set by the API), with totals and grouping by threat.

輸入參數hourslimit

get_recent_yara_threats

Get Recent YARA Threats

List YARA rule matches from scans in the last hours, each with the scan, URL, rule, category, severity and confidence.

輸入參數hourslimit

get_ct_certificates

Get CT Certificates

Get the certificates issued for a domain according to Certificate Transparency logs, with a found flag.

輸入參數domain必填

get_ct_dns_records

Get CT DNS Records

List subdomains of a domain found through Certificate Transparency, with their DNS records (type, IP addresses, TTL) and when they were seen. Useful for finding the other hosts of a domain.

輸入參數domain必填

get_ct_domains_by_ip

Get CT Domains By IP

List domains that Certificate Transparency and DNS data associate with an IP address, with record counts and the total.

輸入參數ip_address必填

get_ct_similar_domains

Get CT Similar Domains

Find domains with names similar to a domain in Certificate Transparency data (for example lookalikes and typosquats), each with a certificate count and the kind of similarity.

輸入參數domain必填

get_ct_timeline

Get CT Timeline

Get the certificate history of a domain from Certificate Transparency: when certificates were issued and when the certificate changed.

輸入參數domain必填

get_api_root

Get API Root

Get the ScanMalware API's name, version, status, main endpoints and feature list.

無需輸入參數。

get_health

Get Health

Check whether the ScanMalware API is up. Returns the service status.

無需輸入參數。

get_platform_stats

Get Platform Stats

Get the current scan queue length, running scans and scans completed in the last 24 hours by visibility.

無需輸入參數。

get_latest_capabilities

Get Latest Capabilities

Get the current size of ScanMalware's detection content: indicator count, malware detection rules and ClamAV signatures.

無需輸入參數。

get_capabilities_by_date

Get Capabilities By Date

Get the size of ScanMalware's detection content (indicators, detection rules, ClamAV signatures) on a given date (scan_date, YYYY-MM-DD).

輸入參數scan_date必填

get_clipboard_stats

Get Clipboard Stats

Get clipboard and pastejacking statistics across the archive: event totals, detections and daily activity.

無需輸入參數。

get_cpe_stats

Get CPE Stats

Get CPE statistics across the archive: scans with CPEs, unique CPEs, total detections, top vendors and products.

無需輸入參數。

get_cpe_by_scan

Get CPE By Scan

List the CPE identifiers (product and version names in the NVD format) derived from the technologies detected on a scanned page, with their source. Useful for matching against vulnerability data. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

search_cpe

Search CPE

Find scans with a CPE identifier matching a pattern such as 'cpe:2.3:a:facebook:react' (paginated). Useful for finding sites running a given product.

輸入參數pagelimitcpe_pattern必填

get_ids_alerts

Get IDS Alerts

Get intrusion detection (IDS) alerts raised on the network traffic recorded during one scan, with a severity breakdown and total count. Empty when no rule fired. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_jarm_stats

Get JARM Stats

Get JARM statistics across the archive, including the most common signatures. Common signatures usually belong to large hosting platforms.

無需輸入參數。

get_malware_stats

Get Malware Stats

Get malware detection statistics across the archive: overall and last-24-hour counts, top threats and hourly trend.

無需輸入參數。

get_malware_by_scan

Get Malware By Scan

Get the malware detections for files the scanned page delivered, with threat names, detection counts and the detection source. Empty when nothing was detected. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_yara_stats

Get YARA Stats

Get YARA statistics across the archive: overall and last-24-hour matches, severity and category distribution and top threats.

無需輸入參數。

get_yara_by_scan

Get YARA By Scan

Get YARA rule matches for one scan, with a summary by severity (critical, high, medium, low) and category. Empty when no rule matched. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_safe_browsing_stats

Get Safe Browsing Stats

Get Google Safe Browsing statistics across the archive: total threats, threats in the last 7 days, scans with threats and threat types.

無需輸入參數。

get_safe_browsing

Get Safe Browsing

Get Google Safe Browsing threats found for the URLs in one scan, with a has_threats flag. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_top_tracking_keys

Get Top Tracking Keys

List the tracking and site keys seen on the most sites (analytics IDs, CAPTCHA keys and so on), with the tracker name, category and site count; tracker_type filters by kind.

輸入參數limittracker_type

search_tracking_key

Search Tracking Key

Find scans that embed a given tracking or site key, such as an analytics ID or a CAPTCHA site key (tracker_type and key), sorted latest or oldest; paginated. A shared key often ties sites to one operator.

輸入參數key必填pagesortlimittracker_type必填

search_technologies

Search Technologies

Search the web technologies detected across the archive by name (q) or category, each with how many scans used it and when it was last seen; paginated.

輸入參數qpagelimitcategory

get_technology_combinations

Get Technology Combinations

List the technologies most often detected together with a given technology, with counts; min_occurrences drops rare pairs; paginated.

輸入參數pagelimittech_name必填min_occurrences

get_technology_stats

Get Technology Stats

Get technology detection statistics across the archive: unique technologies, total detections and counts per category. This aggregate query can take up to 90 seconds by default.

無需輸入參數。

search_by_nameserver

Search By Nameserver

List the scanned domains that use a given nameserver, with totals and counts per top-level domain. Useful for finding domains registered together.

輸入參數nameserver必填

get_rdap

Get RDAP

Get registration data (RDAP) for the scanned domain and its IP addresses: registrar, registration and expiry dates, domain age, nameservers and status. A very young domain is a common phishing signal. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

search_by_registrar

Search By Registrar

List scans of domains registered through a given registrar (paginated), with the total. Common registrars match very many domains.

輸入參數pagelimitregistrar_name必填

submit_scan_report

Submit Scan Report

Vote on a scan, as the Mark as Safe and Mark as Malicious buttons on its result page do: report_type 'positive_feedback' marks the scanned page as safe and 'malware' marks it as malicious. report_details is an optional note of up to 1000 characters. Votes are recorded as crowd feedback on the scan and are rate-limited per client IP. The website's other report types (phishing, spam, copyright and so on) need a captcha and are not available here.

輸入參數scan_id必填report_type必填report_details

get_ocr_stats

Get OCR Stats

Get OCR statistics across the archive: scans with OCR text, average confidence and length, language distribution and daily counts.

無需輸入參數。

get_ocr_by_scan

Get OCR By Scan

Get the text read by OCR from the scan's screenshot, with language, confidence, word and character counts and any regions flagged as suspicious. Useful when page text is drawn as images. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_open_graph

Get Open Graph

Get the Open Graph and Twitter card metadata the scanned page declared (title, description, image, site name). Phishing pages often copy a brand's metadata. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_pastejacking

Get Pastejacking

Get pastejacking findings for one scan: attempts by the page to replace what a visitor copies, a common trick for making victims paste malicious commands. Includes a detected flag and a note. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

get_netlog

Get Network Log Info

Describe the network log (Chrome NetLog) for a scan_id: whether one exists, its size, and its encoding. The log itself is not returned - these are routinely tens of megabytes gzipped.

輸入參數scan_id必填

get_pcap_metadata

Get PCAP Metadata

Describe the packet capture (PCAP) recorded during one scan: whether it exists, its size, compression and content type. The capture itself is not returned. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

search_favicon_mmh3

Search Favicon MMH3

List scans whose favicon has this mmh3 hash (the same convention as Shodan's http.favicon.hash), each with the page URL, title and favicon details; paginated. Phishing kits often reuse one favicon across many hosts.

輸入參數pagelimitmmh3_hash必填

get_js_runtime_behaviour

Get Runtime JS Behaviour

Get the runtime JavaScript behaviour recorded for one scan: overall risk, risk scores, number of scripts, eval and Function-constructor calls and high-risk events, with a behavioural signature and composite hash. include_detailed_events adds the individual events. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填include_detailed_events

get_js_runtime_stats

Get Runtime JS Behaviour Stats

Get platform-wide statistics for runtime JavaScript analysis: risk distribution, averages and totals of eval calls and high-risk events. Describes the service, not a scan.

無需輸入參數。

get_js_runtime_health

Check Runtime JS Analysis Health

Check whether the runtime JavaScript analysis service is up, with its version.

無需輸入參數。

get_js_runtime_coverage

Get Runtime JS Analysis Coverage

Get how many scans have runtime JavaScript fingerprints: coverage percentage and the number of unique composite hashes and signatures. Describes the service, not a scan.

無需輸入參數。

search_js_obfuscation

Search JS Obfuscation

List scans by the obfuscation signals their runtime JavaScript showed, newest analysis first: overall risk, maximum and average risk score, eval and Function constructor calls and high-risk events. Optional filters are risk_level (such as 'high' or 'critical'), min_risk_score (0-100) and has_eval; with none, the most recently analysed scans are listed.

輸入參數limithas_evalrisk_levelmin_risk_score

search_js_malware_families

Search JS Malware Families

List groups of scans whose runtime JavaScript behaves alike (possible malware families), with clusters of at least min_cluster_size scans (default 2) at similarity_threshold or above (0 to 1, default 0.95). When the service has clustering switched off, status is 'disabled' and no families are returned.

輸入參數limitmin_cluster_sizesimilarity_threshold

search_js_runtime_by_composite_hash

Search Runtime JS Behaviour by Composite Hash

Find scans whose runtime JavaScript behaviour has this composite hash, each with the target URL, overall risk and time. The same composite hash across hosts usually means the same kit.

輸入參數limitcomposite_hash必填

search_js_runtime_by_signature

Search Runtime JS Behaviour by Signature

Find scans with this behavioural signature (for example 'setTimeout:30|fetch:4|complex'), each with the target URL, overall risk and time. An uncached query can take up to 90 seconds by default.

輸入參數limitsignature必填

search_js_runtime_similar

Find Similar Runtime JS Behaviour

Find scans whose runtime JavaScript behaviour is similar to this scan's, above min_similarity; include_self keeps the scan itself. scan_id is the UUID of a ScanMalware scan.

輸入參數limitscan_id必填include_selfmin_similarity

get_js_segments_by_scan

Get JS Segments By Scan

List the code segments (functions and blocks) extracted from one scan's JavaScript, each with location, length, snippet and hashes; script_url narrows to one file, paginated with limit and offset. scan_id is the UUID of a ScanMalware scan.

輸入參數limitoffsetscan_id必填script_url

search_js_segments_by_hash

Search JS Segments By Hash

Find code segments with this exact code hash across the archive, with the scans and scripts they appear in; paginated with limit and offset.

輸入參數limitoffsetcode_hash必填

search_js_segments_by_normalized_hash

Search JS Segments By Normalized Hash

Find code segments with this normalized hash (formatting-independent) across the archive, with the scans and scripts they appear in; paginated with limit and offset.

輸入參數limitoffsetnormalized_hash必填

get_js_segments_suspicious

Get JS Segments Suspicious

List the JavaScript code segments from one scan scored as suspicious, above min_risk_score, with location, snippet and risk details; paginated with limit and offset. scan_id is the UUID of a ScanMalware scan.

輸入參數limitoffsetscan_id必填min_risk_score

get_js_segments_unknown

Get JS Segments Unknown

List the JavaScript code segments from one scan that match no known library, at least min_code_length long; these are usually the page's own or a kit's code. Paginated with limit and offset. scan_id is the UUID of a ScanMalware scan.

輸入參數limitoffsetscan_id必填min_code_length

run_js_differential_analysis

Run JS Differential Analysis

Compare the JavaScript of one scan against known libraries and report which code segments match a library, which are unknown and which look suspicious, with a per-library breakdown. Matches below min_confidence (default 0.8) are not counted; known library code is excluded unless include_known_libraries is true. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填min_confidenceinclude_known_libraries

get_js_library_inventory

Get JS Library Inventory

List the JavaScript libraries and versions detected across the archive, with how many scans used each; library filters to one library and min_count drops rare versions. Identifiers are lowercase names such as 'react', 'jquery' or 'nextjs'.

輸入參數librarymin_count

search_js_fingerprint_patterns

Search JS Fingerprint Patterns

List scanned JavaScript files that match code-pattern filters: has_eval, has_crypto, high_entropy, no_library and cdn_mismatch, where false selects files without the pattern and filters can be combined. With no filter given, has_eval=true is applied. Each result has the fingerprint ID, scan, script URL, code length, obfuscation score and the patterns detected.

輸入參數limithas_evalhas_cryptono_librarycdn_mismatchhigh_entropy

search_js_fingerprint_obfuscated

Search JS Fingerprint Obfuscated

List scanned JavaScript scored as obfuscated, filtered by score range, classification and minimum code length; exclude_libraries drops known library code. min_score and max_score are obfuscation scores from 0 to 1 (defaults 0.7 and 1.0). Paginated with page and per_page.

輸入參數pageper_pagemax_scoremin_scoreclassificationmin_code_lengthexclude_libraries

search_js_fingerprint_by_server

Search JS Fingerprint By Server

Find JavaScript by the type of web server that served it (for example 'nginx' or 'microsoft'), with the matching scripts; include_headers adds the HTTP headers. The total can be a lower bound.

輸入參數limitserver_type必填include_headers

search_js_fingerprint_by_bundler

Search JS Fingerprint By Bundler

Find JavaScript bundles built with a given bundler (webpack, vite, rollup, esbuild and so on), optionally by bundle format and detection confidence, with totals, format breakdown and average size; paginated with page and per_page.

輸入參數pageper_pagebundler_type必填bundle_formatmin_confidenceinclude_libraries

search_js_fingerprint_by_cdn

Search JS Fingerprint By CDN

Find JavaScript served from a given CDN (for example 'cloudflare' or 'jsdelivr'), with totals, the top serving domains and cache status; unpinned_only keeps scripts loaded without a fixed version.

輸入參數limitcdn_type必填unpinned_onlycdn_cache_status

search_js_fingerprint_by_library

Search JS Fingerprint By Library

Find scanned JavaScript detected as a given library (for example 'react', 'jquery' or 'nextjs'; 'Next.js' is accepted for 'nextjs'), optionally one version or a version pattern, with a version breakdown and CDN distribution; paginated with page and per_page.

輸入參數pageversionper_pagelibrary_name必填min_confidenceversion_patterninclude_cdn_only

search_js_fingerprint_by_library_version

Search JS Fingerprint By Library Version

Find scanned JavaScript detected as one exact library version, with the total and the matching scripts; include_deprecated and group_by_url adjust the results. Useful for finding sites running a vulnerable version.

輸入參數limitlibrary必填version必填group_by_urlinclude_deprecated

search_js_fingerprint_by_fuzzy_hash

Search JS Fingerprint By Fuzzy Hash

Find JavaScript files whose fuzzy hash is close to this one, above min_similarity, up to limit results. Fuzzy hashes match files that differ in small parts, such as a kit with a changed configuration.

輸入參數limitfuzzy_hash必填min_similarity

search_js_fingerprint_by_md5

Search JS Fingerprint By MD5

Look up a JavaScript file by MD5 across the archive and report its prevalence: total matches, unique scans, first and last seen, a prevalence label and the matching scripts; include_scans adds the scans, from_date and to_date limit the period.

輸入參數limitto_datefrom_datehash_value必填include_scans

search_js_fingerprint_by_normalized_hash

Search JS Fingerprint By Normalized Hash

Look up JavaScript by normalized hash (computed after whitespace and formatting are removed, so reformatted copies still match) and report prevalence: total matches, unique scans, first and last seen and the matching scripts.

輸入參數limitto_datefrom_datehash_value必填include_scans

search_js_fingerprint_by_sha1

Search JS Fingerprint By SHA1

Look up a JavaScript file by SHA-1 across the archive and report its prevalence: total matches, unique scans, first and last seen, a prevalence label and the matching scripts; include_scans adds the scans, from_date and to_date limit the period.

輸入參數limitto_datefrom_datehash_value必填include_scans

search_js_fingerprint_by_sha256

Search JS Fingerprint By SHA256

Look up a JavaScript file by SHA-256 across the archive and report its prevalence: total matches, unique scans, first and last seen, a prevalence label and the matching scripts; include_scans adds the scans, from_date and to_date limit the period. A rare hash shared by several phishing pages usually means one kit.

輸入參數limitto_datefrom_datehash_value必填include_scans

find_js_fingerprint_similar_by_hash

Find JS Fingerprint Similar By Hash

Find JavaScript files similar to the file with this content SHA-256, above threshold (default 0.7), up to limit results; exclude_exact_matches drops identical copies. Useful for finding modified versions of a known script.

輸入參數limitthresholdcontent_sha256必填exclude_exact_matches

search_jsfingerprints_by_bundler

Search JS Fingerprints By Bundler

Paginated list (limit and offset) of archived script fingerprints built with a given bundler, each with scan, page URL and script URL.

輸入參數limitoffsetbundler必填

search_jsfingerprints_by_library

Search JS Fingerprints By Library

Paginated list (limit and offset) of archived script fingerprints detected as a given library, each with scan, page URL, script URL and version.

輸入參數limitoffsetlibrary必填

search_jsfingerprints_by_library_version

Search JS Fingerprints By Library Version

Paginated list (limit and offset) of archived script fingerprints detected as one library version, each with scan, page URL and script URL.

輸入參數limitoffsetlibrary必填version必填

search_jsfingerprints_by_fuzzy_hash

Search JS Fingerprints By Fuzzy Hash

Paginated list (limit and offset) of archived script fingerprints whose fuzzy hash matches this value, each with scan, page URL and script URL. An empty list means no close match.

輸入參數limitoffsetfuzzy_hash必填

search_jsfingerprints_by_md5

Search JS Fingerprints By MD5

Paginated list (limit and offset) of archived script fingerprints with this MD5, each with scan, page URL, scan time, script URL and hashes.

輸入參數limitoffsethash_value必填

search_jsfingerprints_by_normalized_hash

Search JS Fingerprints By Normalized Hash

Paginated list (limit and offset) of archived script fingerprints with this normalized hash (formatting-independent), each with scan, page URL and script URL.

輸入參數limitoffsethash_value必填

search_jsfingerprints_by_sha1

Search JS Fingerprints By SHA1

Paginated list (limit and offset) of archived script fingerprints with this SHA-1, each with scan, page URL, scan time, script URL and hashes.

輸入參數limitoffsethash_value必填

search_jsfingerprints_by_sha256

Search JS Fingerprints By SHA256

Paginated list (limit and offset) of archived script fingerprints with this SHA-256, each with scan, page URL, scan time, script URL and hashes.

輸入參數limitoffsethash_value必填

get_jsfingerprint

Get JS Fingerprint

Get one JavaScript fingerprint record by its numeric fingerprint_id: the script URL, scan, hashes, metrics and ML vector information; include_functions and include_http_headers add more detail.

輸入參數fingerprint_id必填include_functionsinclude_http_headers

get_jsfingerprint_similar

Get JS Fingerprint Similar

Find JavaScript files whose fingerprint is similar to the one with this fingerprint_id, above threshold (0 to 1), paginated with limit and offset. exclude_same_scan drops matches from the same scan. Useful for finding variants of one script.

輸入參數limitoffsetthresholdfingerprint_id必填exclude_same_scan

get_jsfingerprint_similarity_counts

Get JS Fingerprint Similarity Counts

Count how many archived JavaScript files are similar to the one with this fingerprint_id, per similarity model (composite, CodeBERT, GraphCodeBERT, AST and handcrafted features), capped at max_count. This query can take up to 90 seconds by default.

輸入參數max_countthresholdfingerprint_id必填

get_jsfingerprint_source

Get JS Fingerprint Source

Get the stored source code of one JavaScript file by its numeric fingerprint_id, with its SHA-256, URL and length. Source can be long.

輸入參數fingerprint_id必填

get_jsfingerprint_bundle_stats

Get JS Fingerprint Bundle Stats

Get statistics on bundled JavaScript across the archive for a date range: share of bundled files and the breakdown by bundler (webpack, vite, rollup and so on) and module format.

輸入參數to_datefrom_date

get_jsfingerprint_library_stats

Get JS Fingerprint Library Stats

Get statistics on JavaScript library detection across the archive for a date range: total fingerprints, detection rate and the most common libraries.

輸入參數to_datefrom_datemin_count

get_jsfingerprint_hash_prevalence

Get JS Fingerprint Hash Prevalence

For each script in one scan, report how common its hash is across the archive, which separates widely used library files from rare, page-specific code. scan_id is the UUID of a ScanMalware scan.

輸入參數scan_id必填

版本歷史

1
  1. v0.1.6最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分