dnsbl-check


Namednsbl-check JSON
Version 2.0.2 PyPI version JSON
download
home_pageNone
SummaryOXL DNSBL Checker
upload_time2025-07-27 10:07:06
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords dnsbl blocklists
VCS
bugtrack_url
requirements idna aiodns
Travis-CI No Travis.
coveralls test coverage
            # DNSBL Checker

[![Lint](https://github.com/O-X-L/dnsbl-checker/actions/workflows/lint.yml/badge.svg?branch=latest)](https://github.com/O-X-L/dnsbl-checker/actions/workflows/lint.yml)
[![Test](https://github.com/O-X-L/dnsbl-checker/actions/workflows/test.yml/badge.svg?branch=latest)](https://github.com/O-X-L/dnsbl-checker/actions/workflows/test.yml)

This script/library can check if an IP or Domain is listed on DNS-BL's. 

Please be aware that the providers of such public DNSBL mirrors discourage high-volume lookups. Do not abuse their services! You will run into rate-limits.

**Features**:
* Asynchronous DNS requests
* Multi-provider support
* Ability to add custom providers
* Check for 50+ lists usually takes a few seconds
* Can also check domains

This started as a fork of [github.com/dmippolitov/pydnsbl](https://github.com/dmippolitov/pydnsbl) - so thanks to the contributors ❤️

If you are interested in [report-based reputation-systems => check out our Risk-DB project](https://github.com/O-X-L/risk-db).

Tip: If you want to run your own DNS-BL server - check out our [DNS-BL microservice](https://github.com/O-X-L/dnsbl-server).

----

## Scope

* This script/library should act as a **simple tool** to query DNS-BL's for the user

* **Response Validation**

  Interpreting if the provider's response is 'valid' is **out-of-scope** for this tool. (*like checking for false-positives*)

  This heavily depends on the user's context.

  Thus, the user should make sure to only use DNS-BL providers that are useful/safe for them to use.

  We have added some info about providers here: [Providers.md](https://github.com/O-X-L/dnsbl-checker/blob/latest/Providers.md)

* Users that want to use DNS-BL lookups in commercial settings have to make sure to **read the usage policies of those providers**.

  Some providers do not allow commercial usage in their free-tier.

If you want us to add additional providers or have found that existing ones have quit - [open an Issue](https://github.com/O-X-L/dnsbl-checker/issues) or [contact us per e-mail](mailto://contact+dnsblcheck@oxl.at)

----

## Installation

`pip install dnsbl-check`

----

## Usage

### Via CLI

```bash
dnsbl-check  --help
usage: DNS-BL Lookup-Client [-h] (-i IP | -d DOMAIN) [-j] [-s SKIP_PROVIDERS]
                            [-a ADD_PROVIDERS] [-o ONLY_PROVIDERS] [--details]

options:
  -h, --help            show this help message and exit
  -i IP, --ip IP        IP to check
  -d DOMAIN, --domain DOMAIN
                        Domain to check
  -j JSON, --json JSON  Only output JSON
  -s SKIP_PROVIDERS, --skip-providers SKIP_PROVIDERS
                        Comma-separated list of base-providers to skip
  -o ONLY_PROVIDERS, --only-providers ONLY_PROVIDERS
                        Comma-separated list of DNS-BL provider-domains to query
                        (ignoring the built-in default providers)
  --details             If the result details should be added to the output
```

**Example:**

```bash
dnsbl-check --ip 134.209.173.54
> Checking IP 134.209.173.54 ..
> {
>   "detected": true,
>   "detected_by": [
>     "all.s5h.net",
>     "dnsbl-3.uceprotect.net"
>   ],
>   "categories": [
>     "unknown"
>   ],
>   "general_errors": [],
>   "count": {
>     "detected": 2,
>     "checked": 43,
>     "failed": 2
>   }
> }

# add or skip DNS-BL providers:
dnsbl-check --ip=134.209.173.54 --add-providers dnsbl.risk.oxl.app,dnsbl.host-svc.com --skip-providers abuse.spfbl.net
```

----

### Programmatically

```python3
# IPs
from dnsbl_check import CheckIP
with CheckIP() as checker:
    result = checker.check('134.209.173.54')

print(result)
# <DNSBLResult: 134.209.173.54 [DETECTED] (2/43)>
print(result.to_dict())
# {'request': '134.209.173.54', 'detected': True, 'detected_by': ['all.s5h.net', 'dnsbl-3.uceprotect.net'], 'categories': ['unknown'], 'general_errors': [], 'count': {'detected': 2, 'checked': 43, 'failed': 2}, 'detected_provider_categories': {'all.s5h.net': ['unknown'], 'dnsbl-3.uceprotect.net': ['unknown']}, 'checked_providers': ['all.s5h.net', 'aspews.ext.sorbs.net', 'b.barracudacentral.org', 'bl.nordspam.com', 'blacklist.woody.ch', 'bogons.cymru.com', 'combined.abuse.ch', 'db.wpbl.info', 'dnsbl-2.uceprotect.net', 'dnsbl-3.uceprotect.net', 'dnsbl.sorbs.net', 'drone.abuse.ch', 'ips.backscatterer.org', 'korea.services.net', 'matrix.spfbl.net', 'proxy.bl.gweep.ca', 'proxy.block.transip.nl', 'psbl.surriel.com', 'rbl.interserver.net', 'relays.bl.gweep.ca', 'relays.bl.kundenserver.de', 'relays.nether.net', 'residential.block.transip.nl', 'singular.ttk.pte.hu', 'spam.dnsbl.sorbs.net', 'spambot.bls.digibase.ca', 'spamlist.or.kr', 'spamrbl.swinog.ch', 'spamsources.fabel.dk', 'ubl.lashback.com', 'virus.rbl.jp', 'z.mailspike.net', 'zen.spamhaus.org'], 'failed_providers': ['ix.dnsbl.manitu.net', 'spamlist.or.kr']}
print(result.to_json())
# ... (to_dict but in pretty json)

# Domains
from dnsbl_check import CheckDomain
with CheckDomain() as checker:
    result = checker.check('malware.com')

print(result)
# <DNSBLResult: malware.com (0/2)>

# add or skip DNS-BL providers
from dnsbl_check.provider import Provider, BASE_PROVIDERS_IP
providers = BASE_PROVIDERS_IP + [Provider('dnsbl.risk.oxl.app')]
with CheckIP(providers=providers, skip_providers=['abuse.spfbl.net']) as checker:
    result = checker.check('134.209.173.54')

# add or skip DNS-BL providers
from dnsbl_check.provider import Provider, BASE_PROVIDERS_IP
providers = BASE_PROVIDERS_IP + [Provider('dnsbl.risk.oxl.app')]
with CheckIP(providers=providers, skip_providers=['abuse.spfbl.net']) as checker:
    result = checker.check('134.209.173.54')

print(result)
# <DNSBLResult: 134.209.173.54 [DETECTED] (3/44)>
```

----

## Contributing

Contributions are welcome (:

See: [Contribute](https://github.com/O-X-L/dnsbl-checker/blob/latest/Contribute.md)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "dnsbl-check",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "dnsbl, blocklists",
    "author": null,
    "author_email": "Rath Pascal <contact@oxl.at>",
    "download_url": "https://files.pythonhosted.org/packages/4b/3b/80b19f9685df24a95e0bda0990860b9c98912616d2368742cdcee82dc53c/dnsbl_check-2.0.2.tar.gz",
    "platform": null,
    "description": "# DNSBL Checker\n\n[![Lint](https://github.com/O-X-L/dnsbl-checker/actions/workflows/lint.yml/badge.svg?branch=latest)](https://github.com/O-X-L/dnsbl-checker/actions/workflows/lint.yml)\n[![Test](https://github.com/O-X-L/dnsbl-checker/actions/workflows/test.yml/badge.svg?branch=latest)](https://github.com/O-X-L/dnsbl-checker/actions/workflows/test.yml)\n\nThis script/library can check if an IP or Domain is listed on DNS-BL's. \n\nPlease be aware that the providers of such public DNSBL mirrors discourage high-volume lookups. Do not abuse their services! You will run into rate-limits.\n\n**Features**:\n* Asynchronous DNS requests\n* Multi-provider support\n* Ability to add custom providers\n* Check for 50+ lists usually takes a few seconds\n* Can also check domains\n\nThis started as a fork of [github.com/dmippolitov/pydnsbl](https://github.com/dmippolitov/pydnsbl) - so thanks to the contributors \u2764\ufe0f\n\nIf you are interested in [report-based reputation-systems => check out our Risk-DB project](https://github.com/O-X-L/risk-db).\n\nTip: If you want to run your own DNS-BL server - check out our [DNS-BL microservice](https://github.com/O-X-L/dnsbl-server).\n\n----\n\n## Scope\n\n* This script/library should act as a **simple tool** to query DNS-BL's for the user\n\n* **Response Validation**\n\n  Interpreting if the provider's response is 'valid' is **out-of-scope** for this tool. (*like checking for false-positives*)\n\n  This heavily depends on the user's context.\n\n  Thus, the user should make sure to only use DNS-BL providers that are useful/safe for them to use.\n\n  We have added some info about providers here: [Providers.md](https://github.com/O-X-L/dnsbl-checker/blob/latest/Providers.md)\n\n* Users that want to use DNS-BL lookups in commercial settings have to make sure to **read the usage policies of those providers**.\n\n  Some providers do not allow commercial usage in their free-tier.\n\nIf you want us to add additional providers or have found that existing ones have quit - [open an Issue](https://github.com/O-X-L/dnsbl-checker/issues) or [contact us per e-mail](mailto://contact+dnsblcheck@oxl.at)\n\n----\n\n## Installation\n\n`pip install dnsbl-check`\n\n----\n\n## Usage\n\n### Via CLI\n\n```bash\ndnsbl-check  --help\nusage: DNS-BL Lookup-Client [-h] (-i IP | -d DOMAIN) [-j] [-s SKIP_PROVIDERS]\n                            [-a ADD_PROVIDERS] [-o ONLY_PROVIDERS] [--details]\n\noptions:\n  -h, --help            show this help message and exit\n  -i IP, --ip IP        IP to check\n  -d DOMAIN, --domain DOMAIN\n                        Domain to check\n  -j JSON, --json JSON  Only output JSON\n  -s SKIP_PROVIDERS, --skip-providers SKIP_PROVIDERS\n                        Comma-separated list of base-providers to skip\n  -o ONLY_PROVIDERS, --only-providers ONLY_PROVIDERS\n                        Comma-separated list of DNS-BL provider-domains to query\n                        (ignoring the built-in default providers)\n  --details             If the result details should be added to the output\n```\n\n**Example:**\n\n```bash\ndnsbl-check --ip 134.209.173.54\n> Checking IP 134.209.173.54 ..\n> {\n>   \"detected\": true,\n>   \"detected_by\": [\n>     \"all.s5h.net\",\n>     \"dnsbl-3.uceprotect.net\"\n>   ],\n>   \"categories\": [\n>     \"unknown\"\n>   ],\n>   \"general_errors\": [],\n>   \"count\": {\n>     \"detected\": 2,\n>     \"checked\": 43,\n>     \"failed\": 2\n>   }\n> }\n\n# add or skip DNS-BL providers:\ndnsbl-check --ip=134.209.173.54 --add-providers dnsbl.risk.oxl.app,dnsbl.host-svc.com --skip-providers abuse.spfbl.net\n```\n\n----\n\n### Programmatically\n\n```python3\n# IPs\nfrom dnsbl_check import CheckIP\nwith CheckIP() as checker:\n    result = checker.check('134.209.173.54')\n\nprint(result)\n# <DNSBLResult: 134.209.173.54 [DETECTED] (2/43)>\nprint(result.to_dict())\n# {'request': '134.209.173.54', 'detected': True, 'detected_by': ['all.s5h.net', 'dnsbl-3.uceprotect.net'], 'categories': ['unknown'], 'general_errors': [], 'count': {'detected': 2, 'checked': 43, 'failed': 2}, 'detected_provider_categories': {'all.s5h.net': ['unknown'], 'dnsbl-3.uceprotect.net': ['unknown']}, 'checked_providers': ['all.s5h.net', 'aspews.ext.sorbs.net', 'b.barracudacentral.org', 'bl.nordspam.com', 'blacklist.woody.ch', 'bogons.cymru.com', 'combined.abuse.ch', 'db.wpbl.info', 'dnsbl-2.uceprotect.net', 'dnsbl-3.uceprotect.net', 'dnsbl.sorbs.net', 'drone.abuse.ch', 'ips.backscatterer.org', 'korea.services.net', 'matrix.spfbl.net', 'proxy.bl.gweep.ca', 'proxy.block.transip.nl', 'psbl.surriel.com', 'rbl.interserver.net', 'relays.bl.gweep.ca', 'relays.bl.kundenserver.de', 'relays.nether.net', 'residential.block.transip.nl', 'singular.ttk.pte.hu', 'spam.dnsbl.sorbs.net', 'spambot.bls.digibase.ca', 'spamlist.or.kr', 'spamrbl.swinog.ch', 'spamsources.fabel.dk', 'ubl.lashback.com', 'virus.rbl.jp', 'z.mailspike.net', 'zen.spamhaus.org'], 'failed_providers': ['ix.dnsbl.manitu.net', 'spamlist.or.kr']}\nprint(result.to_json())\n# ... (to_dict but in pretty json)\n\n# Domains\nfrom dnsbl_check import CheckDomain\nwith CheckDomain() as checker:\n    result = checker.check('malware.com')\n\nprint(result)\n# <DNSBLResult: malware.com (0/2)>\n\n# add or skip DNS-BL providers\nfrom dnsbl_check.provider import Provider, BASE_PROVIDERS_IP\nproviders = BASE_PROVIDERS_IP + [Provider('dnsbl.risk.oxl.app')]\nwith CheckIP(providers=providers, skip_providers=['abuse.spfbl.net']) as checker:\n    result = checker.check('134.209.173.54')\n\n# add or skip DNS-BL providers\nfrom dnsbl_check.provider import Provider, BASE_PROVIDERS_IP\nproviders = BASE_PROVIDERS_IP + [Provider('dnsbl.risk.oxl.app')]\nwith CheckIP(providers=providers, skip_providers=['abuse.spfbl.net']) as checker:\n    result = checker.check('134.209.173.54')\n\nprint(result)\n# <DNSBLResult: 134.209.173.54 [DETECTED] (3/44)>\n```\n\n----\n\n## Contributing\n\nContributions are welcome (:\n\nSee: [Contribute](https://github.com/O-X-L/dnsbl-checker/blob/latest/Contribute.md)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "OXL DNSBL Checker",
    "version": "2.0.2",
    "project_urls": {
        "Documentation": "https://github.com/O-X-L/dnsbl-checker",
        "Homepage": "https://www.oxl.at",
        "Issues": "https://github.com/O-X-L/dnsbl-checker/issues",
        "Repository": "https://github.com/O-X-L/dnsbl-checker.git"
    },
    "split_keywords": [
        "dnsbl",
        " blocklists"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "822c659d459e8763fab0bcd011e6cfdf78d2f7a140984dc9f1cc6380100daf0c",
                "md5": "7c9e7972cb681a0dc4f4a1718d7ab509",
                "sha256": "f41e644db5827d0500c3815d3683a15ef1445b06ecf3df8864caba48027b3fff"
            },
            "downloads": -1,
            "filename": "dnsbl_check-2.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7c9e7972cb681a0dc4f4a1718d7ab509",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 17391,
            "upload_time": "2025-07-27T10:07:05",
            "upload_time_iso_8601": "2025-07-27T10:07:05.235253Z",
            "url": "https://files.pythonhosted.org/packages/82/2c/659d459e8763fab0bcd011e6cfdf78d2f7a140984dc9f1cc6380100daf0c/dnsbl_check-2.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4b3b80b19f9685df24a95e0bda0990860b9c98912616d2368742cdcee82dc53c",
                "md5": "acb81654ee0781f125ed0de3087417ba",
                "sha256": "255dba70fd6d71a466be1f9f4a84ec1abd43276a11c43ca652d225b31d62f658"
            },
            "downloads": -1,
            "filename": "dnsbl_check-2.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "acb81654ee0781f125ed0de3087417ba",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 15926,
            "upload_time": "2025-07-27T10:07:06",
            "upload_time_iso_8601": "2025-07-27T10:07:06.827964Z",
            "url": "https://files.pythonhosted.org/packages/4b/3b/80b19f9685df24a95e0bda0990860b9c98912616d2368742cdcee82dc53c/dnsbl_check-2.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-27 10:07:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "O-X-L",
    "github_project": "dnsbl-checker",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [
        {
            "name": "idna",
            "specs": []
        },
        {
            "name": "aiodns",
            "specs": []
        }
    ],
    "lcname": "dnsbl-check"
}
        
Elapsed time: 0.64214s