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

PyPI version Python Version License Category

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.3.1.tar.gz (13.4 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.3.1-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for iocscrape-0.3.1.tar.gz
Algorithm Hash digest
SHA256 980bdccf6571cf69147c27fd1866e5c3d1e5d4227be95f11eb6d3ffa56deb44c
MD5 6936219e1d0e08c2c791bbf159fcdd8a
BLAKE2b-256 6cf072fde51f4840cadbc32fa29102a5741c15c0d6ab107c827e25c2d8c492cf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: iocscrape-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 16.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.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f56c1692b997c799c906967e799d6927f325892d779eaf23d9e54b4e6f18fdef
MD5 c6618ed5201c2719aa35833c6f7c6fca
BLAKE2b-256 7b2f04a7ecdf026ee3f9699ce17eecae1993107cb61c0c91157426d817289cd6

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