An open API service indexing awesome lists of open source software.

https://github.com/streanger/abuseipdb-wrapper

python wrapper for abuseipdb api
https://github.com/streanger/abuseipdb-wrapper

abuseipdb abuseipdb-api abuseipdb-cli

Last synced: 12 months ago
JSON representation

python wrapper for abuseipdb api

Awesome Lists containing this project

README

          

*********************
abuseipdb-wrapper
*********************

Info
###########################

- python wrapper for abuseipdb API (https://docs.abuseipdb.com/#introduction)

- gives you informations about abuse level of specified IP addresses

- focuses on caching results in local db

Install
###########################

stable version from pypi

.. code-block:: bash

pip install abuseipdb-wrapper

or newest version from github

.. code-block:: bash

pip install git+https://github.com/streanger/abuseipdb-wrapper.git

Command-line usage
###########################

.. code-block:: bash

abuse

or as module

.. code-block:: bash

python -m abuseipdb_wrapper

Python usage
###########################

- **init `AbuseIPDB` object**

Init ``AbuseIPDB`` object using API KEY created on https://www.abuseipdb.com/. Optionally you can provide `db_file` for your local database. It is recommended because this project focuses on storing data for further quick access without need of another requests.

.. code-block:: python

from abuseipdb_wrapper import AbuseIPDB
API_KEY = 'YOUR_API_KEY'
abuse = AbuseIPDB(api_key=API_KEY, db_file='abuseipdb.json')
abuse.colors_legend()

- **check list of IPs**

Specify list of IPs to be checked using ``add_ip_list`` method. Then call ``check`` method and wait for results.

.. code-block:: python

ips = ['1.2.3.4', '5.6.7.8', '9.10.11.12', '13.14.15.16']
abuse.add_ip_list(ips)
abuse.check()

- **no db caching approach**

If you are not interested in caching data in local database and only want to request for IP addresses one by one use the following code.
Have in mind that `.check_ip` method enriches results and removes `reports` section.
If using wrapper is like overkill in your project, go to: https://docs.abuseipdb.com/?python#check-endpoint

.. code-block:: python

from abuseipdb_wrapper import AbuseIPDB
API_KEY = 'YOUR_API_KEY'
abuse = AbuseIPDB(api_key=API_KEY)
ips = ['1.2.3.4', '2.3.4.5', '3.4.5.6']
for IP in ips:
result = abuse.check_ip() # enriched with url and request time
result = abuse.check_ip_orig() # results in original form
print(result)

- **show local db**

To display collected informations use ``show`` method. Alternatively call ``print`` on your ``AbuseIPDB`` object. You can specify columns to be displayed using ``apply_columns_order`` method. It affects both vertical and table view.

.. code-block:: python

columns = ['ipAddress', 'abuseConfidenceScore', 'totalReports', 'countryCode', 'domain', 'isp']
abuse.apply_columns_order(columns)
# show db by print or using .show method
print(abuse)
abuse.show(matched_only=False, table_view=True)

- **viewer**

For interactive IP check use ``.viewer`` method. It let you to provide multiple IPs at once. Use help for more information.

.. code-block:: python

abuse.viewer()
~< abuse >~: columns [columns list] # shows or apply columns order
~< abuse >~: export [csv, html, xlsx, md] # export to file
~< abuse >~: all # check/show all database

- **exports**

.. code-block:: python

abuse.export_csv('out.csv', matched_only=False)
abuse.export_html_styled('out.html', matched_only=False)
abuse.export_xlsx_styled('out.xlsx', matched_only=False)
abuse.export_md('out.md', matched_only=False)

- **convert to dataframe object**

.. code-block:: python

import pandas as pd
matched = abuse.get_db(matched_only=False)
df = pd.DataFrame(matched.values())

- **json columns**

- :code:`abuseConfidenceScore`
- :code:`countryCode`
- :code:`date` # additional
- :code:`domain`
- :code:`hostnames`
- :code:`ipAddress`
- :code:`ipVersion`
- :code:`isPublic`
- :code:`isWhitelisted`
- :code:`isp`
- :code:`lastReportedAt`
- :code:`numDistinctUsers`
- :code:`totalReports`
- :code:`url` # additional
- :code:`usageType`
- :code:`isTor`

Screenshots
###########################

- banner

.. image:: https://raw.githubusercontent.com/streanger/abuseipdb-wrapper/main/screenshots/banner.png

- colors legend

.. image:: https://raw.githubusercontent.com/streanger/abuseipdb-wrapper/main/screenshots/legend.png

- help

.. image:: https://raw.githubusercontent.com/streanger/abuseipdb-wrapper/main/screenshots/help.png

- vertical view

.. image:: https://raw.githubusercontent.com/streanger/abuseipdb-wrapper/main/screenshots/abuse-vertical-view.png

- table view

.. image:: https://raw.githubusercontent.com/streanger/abuseipdb-wrapper/main/screenshots/abuse-table-view.png

Changelog
###########################
- `v.0.2.0`:

- removed pandas and Jinja2 dependencies
- custom export functions
- :code:`date` as isoformat with timezone

- `v.0.1.9`:

- additional :code:`isTorNode` field replaced with :code:`isTor` supported by api

- `v.0.1.8`:

- more flexible exports
- passing :code:`api_key` to :code:`AbuseIPDB` is now optional
- keep order for passing IPs
- viewer:
- skip private IPs flag
- sumup flag
- force new check flag
- more verbose logs
- asterisks for api key using pwinput
- colors support for: windows-cmd, windows-terminal, windows-powershell, vscode, linux-terminal
- tests coverage for most features
- export to markdown
- and few smaller changes

- `v.0.1.7`:

- `abuse` entrypoint
- `columns` command in interactive view
- `export` command in interactive view (to .csv, .html, .xlsx)
- tor exit nodes enrichment
- storing db file in user home directory
- original API request using `.check_ip_orig`
- getpass and keyring for API_KEY read & store

- `v.0.1.6` and before:

- black background for better view in powershell
- export to csv, html, xlsx (from pandas df)
- wrap text in table cells - made using rich table
- return dataframe object
- enrich results with date of last check