Skip to main content

CTI tool to extract IOCs from CTI reports (URLs or files), and write them to an output file. Low-confidence items are grouped at the end.

Project description

iocscrape

CTI tool to extract IOCs from CTI reports (URLs or files)
IOC extraction is best-effort and may produce false positives - always review before ingestion.

Links

Features

  • Extract IOCs from:
    • URLs (CTI articles / reports)
    • Files: txt, html, pdf, docx, xlsx
  • Uses trafilatura to convert web pages into clean text (reduces noise from hidden links / menus / assets).
  • Groups suspicious/noisy matches into Low-Confidence (Review) using:
    • Public Suffix List (PSL) validation
    • MISP warninglists (vendored snapshot + optional --update)
    • filename-like domain detection (e.g. something.png)
    • static asset URL detection (e.g. .png, .css, .woff2)
  • Output formats:
    • Default: TXT (pixhash-like run log style)
    • Optional: JSON
  • --update updates both: warninglists + PSL

Installation

Option 1: pipx (recommended)

python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install iocscrape

Option 2:

pip install iocscrape

Usage

Extract from URL

iocscrape --url "https://example.com/report" --out output.txt

Extract from File

iocscrape --file "/path/report.pdf" --out output.txt

JSON Output

iocscrape --url "https://example.com/report" --out output.json --format json

Updating datasets (Warninglists + PSL)

By default, iocscrape ships with a vendored snapshot of:

  • MISP warninglists, and
  • Public Suffix List (PSL).

To update them:

iocscrape --update

To update + run extraction in one command:

iocscrape --update --url "https://example.com/report" --out output.txt

Cache location: ~/.cache/iocscrape

Supported IOC Types

  • URL
  • Domain
  • IPv4
  • IPv6
  • Email
  • MD5
  • SHA1
  • SHA256
  • CVE

Output

1. TXT (Default)

The output file is a run log:

  • Results section contains "high-confidence" IOCs
  • Low-Condidence (Review) section contains items flagged by:
    • Warninglists match
    • PSL invalid suffix
    • Filename-like "domain"
    • Static asset URL

Example structure:

iocscrape Run Log
=================

[#] Target:       ...
[#] Date:         ...
[#] Time:         ...
[#] User-Agent:   ...
[#] Output File:  ...

-------
Results
-------

[#] URL (..)
...

-----------------------
Low-Confidence (Review)
-----------------------

[#] DOMAIN (..)
value >> reason

2. JSON

Contains:

  • Counts per IOC type
  • IOC by type
  • Low-confidence array with reasons

Notes on False Positives

This tool uses regex-based extraction. It can still pick up:

  • File names that look like domains
  • Configuration keys
  • Benign public infrastructure (flagged via warninglists / PSL into low-confidence)

Always review the output before operational ingestion (SIEM/Blocklists/EDR/Firewall... etc.).

License

MIT License. See LICENSE.

Contributing

Issues/PRs are welcomed:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iocscrape-0.2.0.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

iocscrape-0.2.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file iocscrape-0.2.0.tar.gz.

File metadata

  • Download URL: iocscrape-0.2.0.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for iocscrape-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f4ddecc87075dce112d641ae9c0598feb173616bf669d10deb800363a9584a8c
MD5 dff02555478736327a7a7c152b4c0fcc
BLAKE2b-256 e5cff69cff774721f34fac1fe3917614f2874193a38a1a4bb47b0abd52bde31f

See more details on using hashes here.

File details

Details for the file iocscrape-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: iocscrape-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for iocscrape-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e5bb8f587eb19280ebfb8c01a60aa2b8bb4b5db2a246e4d0fe64dee783a81d92
MD5 37e19afccacda0a40e508dcf1491775d
BLAKE2b-256 93b09a280a6db786c5cd7f965ed8ae588ef1b225b7f3d5ef227cac12779272b5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page