src/torinator | ||
.gitignore | ||
.pre-commit-config.yaml | ||
docker-compose.yml | ||
Dockerfile | ||
LICENSE | ||
MANIFEST.in | ||
README.md | ||
setup.py |
TORinator
A Tor IP address indexer. A local database is maintained and regularly updated from multiple sources. By default, the sources are scraped every 45 minutes in order to prevent rate limiting / blocking. You can override this using an enviornment variable - details below.
API Docs
# Get All IPs
curl -s http://127.0.0.1:5000/api/v1/ips | jq '.'
# Get All Exclusions
curl -s http://127.0.0.1:5000/api/v1/exclusions | jq '.'
# Add Exclusion IP
curl -X POST http://127.0.0.1:5000/api/v1/exclusions \
-H 'Content-Type: application/json' \
-d '{ "ip": "202.59.9.238" }' | jq '.'
# Remove Exclusion IP
curl -X DELETE http://127.0.0.1:5000/api/v1/exclusions/202.59.9.238
Configuration
The application can be configured using environment variables. The following vars are available:
Environment Variable | Description | Default |
---|---|---|
TORINATOR_DB_TYPE | Database type (memory / sqlite) | sqlite |
TORINATOR_DATA_PATH | Path to store the database | ./ |
TORINATOR_UPDATE_SOURCE | Update source (web / file ) | web |
TORINATOR_UPDATE_CADENCE | Update cadence in seconds | 2700 |
You can find examples in the docker-compose.yml
file.
Running (Production)
# Be sure image is built
docker-compose build
# Run compose in background. Service accessible via localhost:5000
docker-compose up -d
# Alternatively, in virtualenv
torinator run
Running (Development)
Once you have installed the setup.py and torinator[dev] dependencies, you can
run pre-commit
to lint all server files:
pre-commit run --all-files
To run:
# Setup virtual env
python3 -m venv torinator_venv
. torinator_venv/bin/activate
# Link torinator to working directory & install dev dependencies
python setup.py develop easy_install torinator[dev]
# Can use to run the server
torinator run
# Or with env vars
TORINATOR_UPDATE_SOURCE=file torinator run
Adding Sources
While a little cumbersome, you can add additional sources in the
./src/torinator/list_updater.py
file. In the __init__
, add additional
sources with their URL's, parsing function, and filepath (if desired). Using
a filepath allows you to reference a local file for parsing instead of hitting
the web everytime. This is useful during development to prevent rate limiting.
Local files should be stored in ./src/torinator/resources/*
and are copied by
the MANIFEST.in
during build.