Dibbler is a standalone Windows PowerShell analyst tool for enriching CSV files with IP geolocation and network ownership data using DuckDB and DuckDB's MaxMind community extension.
It is named after the dibbler (Parantechinus apicalis), an endangered marsupial native to south west Western Australia.
- CSV input and CSV output.
- Single CSV files, multiple explicit CSV files, or a non-recursive folder of CSV files.
- Analyst-selected IP columns.
- DuckDB-managed enrichment using GeoLite Country, City, and ASN databases.
- One enriched CSV output per source CSV.
- Source evidence files are not modified.
- Windows.
- Windows PowerShell 5.1 or PowerShell 7.
- Network access for first-time downloads unless DuckDB and GeoLite databases are already present.
Dibbler can download:
- DuckDB CLI from
https://github.com/duckdb/duckdb/releases/latest - GeoLite
.mmdbfiles fromhttps://github.com/P3TERX/GeoLite.mmdb/releases/latest
Open PowerShell in the Dibbler folder:
.\Run-Dibbler.ps1Use the GUI tabs in order:
Setup: check or download DuckDB and GeoLite files.Source: add CSV files or a folder, then inspect headers.Mapping: confirm one or more IP columns.Run: choose output folder and run enrichment.Logs: review runtime log output.
Download missing dependencies:
.\Run-Dibbler.ps1 -NoGui -InstallDuckDb -InstallGeoLiteForce re-download:
.\Run-Dibbler.ps1 -NoGui -InstallDuckDb -InstallGeoLite -ForceDownloadSingle CSV:
.\Run-Dibbler.ps1 -NoGui -SourcePath C:\Data\source.csv -OutputPath C:\Data\Enriched -IpColumn ClientIPMultiple IP columns:
.\Run-Dibbler.ps1 -NoGui -SourcePath C:\Data\proxy.csv -OutputPath C:\Data\Enriched -IpColumn SourceIP,DestinationIPGenerate SQL without executing DuckDB:
.\Run-Dibbler.ps1 -NoGui -SourcePath C:\Data\source.csv -OutputPath C:\Data\Enriched -IpColumn ClientIP -PrepareOnlyDibbler preserves original source columns and appends enrichment columns for each selected IP field:
<IpField>_geo_country_iso_code<IpField>_geo_country_name<IpField>_geo_city_name<IpField>_geo_subdivision_name<IpField>_geo_latitude<IpField>_geo_longitude<IpField>_geo_asn<IpField>_geo_as_org
AS organization data comes from GeoLite2-ASN.mmdb; there is no separate ASO database file.
By default, output files are written under output/ and use incrementing filenames when a collision exists, such as:
source.enriched.csv
source.enriched_1.csv
These folders are local runtime areas and are ignored by Git:
data/: GeoLite databases.logs/: session logs.output/: enriched CSV files.working/: generated SQL, temporary DuckDB files, downloaded archives.tools/duckdb/: downloaded DuckDB executable.
Each runtime directory includes a .gitignore so the folder can exist in the repo without uploading runtime contents.
Dibbler creates temporary DuckDB database files under working/. Successful runs try to remove .duckdb and .duckdb.wal files automatically.
If Windows still has a transient lock on the files, cleanup is deferred and retried on a later run or through manual cleanup:
.\Run-Dibbler.ps1 -NoGui -CleanWorkingDatabasesTo keep working databases for troubleshooting:
.\Run-Dibbler.ps1 -NoGui -SourcePath C:\Data\source.csv -IpColumn ClientIP -RetainWorkingDatabaseThe GUI also has Retain working DuckDB files and Clean Working DBs controls.
Settings live in config.json. Important fields include:
app.versionduckdb.pathmaxmind.countryDatabasePathmaxmind.cityDatabasePathmaxmind.asnDatabasePathpaths.defaultOutputDirectorypaths.logDirectorypaths.workDirectoryprocessing.overwriteExistingOutputprocessing.defaultIpColumnSuggestionsprocessing.retainWorkingDatabases
Config loading merges missing settings with defaults.
Run the core Pester tests:
Invoke-Pester .\tests\Dibbler.Core.Tests.ps1The tests are written to work with the older Pester 3 syntax commonly available on Windows analyst VMs.
- Keep GUI/state handling in
modules/Dibbler.Gui.psm1. - Keep testable behavior in
modules/Dibbler.Core.psm1. - Do not commit downloaded databases, outputs, logs, or working files.
- Update
CHANGELOG.mdandconfig.jsonversion for functional changes.