{"id":34083433,"url":"https://github.com/aau-network-security/richkit","last_synced_at":"2026-04-06T02:01:46.974Z","repository":{"id":45440741,"uuid":"209554745","full_name":"aau-network-security/richkit","owner":"aau-network-security","description":"Domain Enrichment Toolkit $ pip install richkit","archived":false,"fork":false,"pushed_at":"2023-05-22T22:30:25.000Z","size":21867,"stargazers_count":11,"open_issues_count":9,"forks_count":3,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-12-16T15:21:31.625Z","etag":null,"topics":["analysis","categorization","domain","machine-learning","url"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/richkit/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aau-network-security.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-19T12:59:16.000Z","updated_at":"2024-08-12T19:53:09.000Z","dependencies_parsed_at":"2022-09-12T19:30:25.046Z","dependency_job_id":null,"html_url":"https://github.com/aau-network-security/richkit","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/aau-network-security/richkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aau-network-security%2Frichkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aau-network-security%2Frichkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aau-network-security%2Frichkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aau-network-security%2Frichkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aau-network-security","download_url":"https://codeload.github.com/aau-network-security/richkit/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aau-network-security%2Frichkit/sbom","scorecard":{"id":159643,"data":{"date":"2025-08-11","repo":{"name":"github.com/aau-network-security/richkit","commit":"2575eeeeaf2151f0a4c42d4bea9caa9fcc1350c7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Code-Review","score":3,"reason":"Found 3/10 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/formatpythoncode.yml:1","Warn: no topLevel permission defined: .github/workflows/pythonpackage.yml:1","Warn: no topLevel permission defined: .github/workflows/pythonpublish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/formatpythoncode.yml:7: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/formatpythoncode.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/formatpythoncode.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/formatpythoncode.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/formatpythoncode.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/formatpythoncode.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpackage.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpackage.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpackage.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpackage.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpackage.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpackage.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpackage.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpublish.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpublish.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpublish.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pythonpublish.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/aau-network-security/richkit/pythonpublish.yml/develop?enable=pin","Warn: containerImage not pinned by hash: Dockerfile.test:1: pin your Docker image by updating ubuntu to ubuntu@sha256:a08e551cb33850e4740772b38217fc1796a66da2506d312abe51acda354ff061","Warn: pipCommand not pinned by hash: Dockerfile.test:16","Warn: pipCommand not pinned by hash: Dockerfile.test:18","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:19","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:70","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:71","Warn: pipCommand not pinned by hash: .github/workflows/pythonpackage.yml:72","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:18","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:19","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   8 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'","Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"15 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-3rq5-2g8h-59hc","Warn: Project is vulnerable to: GHSA-55x5-fj6c-h6m8","Warn: Project is vulnerable to: PYSEC-2021-19 / GHSA-jq4v-f5q6-mjqq","Warn: Project is vulnerable to: PYSEC-2020-62 / GHSA-pgww-xf46-h92r","Warn: Project is vulnerable to: PYSEC-2022-230 / GHSA-wrxv-2j5q-m38w","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: GHSA-6p56-wp2h-9hxr","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2023-74 / GHSA-j8r2-6x86-q33q","Warn: Project is vulnerable to: PYSEC-2020-107 / GHSA-jjw5-xxj6-pcv5","Warn: Project is vulnerable to: PYSEC-2024-110 / GHSA-jw8x-6495-233v","Warn: Project is vulnerable to: PYSEC-2020-108"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T12:58:36.761Z","repository_id":45440741,"created_at":"2025-08-16T12:58:36.761Z","updated_at":"2025-08-16T12:58:36.761Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31456664,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analysis","categorization","domain","machine-learning","url"],"created_at":"2025-12-14T12:43:43.932Z","updated_at":"2026-04-06T02:01:46.965Z","avatar_url":"https://github.com/aau-network-security.png","language":"Python","readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\".github/logo/blue/logo_no_desc/256x256.png\"  /\u003e\n\u003ch1\u003eRichkit \u003c/h1\u003e\n\u003c/div\u003e\n\u003cp align=\"center\"\u003e \n\u003cdiv align=\"center\"\u003e\n   \u003c!-- todo github actions buiild status  --\u003e\n  \u003ca href=\"https://img.shields.io/pypi/pyversions/richkit\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/pyversions/richkit\" alt=\"GitHub release\"\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://github.com/aau-network-security/richkit/blob/master/LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/l/richkit\" alt=\"licence\"\u003e\n  \u003c/a\u003e\n  \u003cdiv align =\"center\"\u003e\n  \u003ca href=\"https://github.com/aau-network-security/richkit/issues\"\u003e\n  \u003cimg src=https://img.shields.io/github/issues/aau-network-security/richkit?style=flat-square alt=\"issues\"\u003e\n  \n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/aau-network-security/richkit/network/members\"\u003e\n  \u003cimg src=https://img.shields.io/github/forks/aau-network-security/richkit \u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/aau-network-security/richkit/stargazers\"\u003e\n  \u003cimg src=https://img.shields.io/github/stars/aau-network-security/richkit\u003e\u003c/a\u003e\n  \u003c/div\u003e\n\n \u003c/div\u003e\n\nRichkit is a python3 package that provides tools taking a domain name as input, and returns addtional information on that domain. It can be an analysis of the domain itself, looked up from data-bases, retrieved from other services, or some combination thereof.\n\nThe purpose of richkit is to provide a reusable library of domain name-related analysis, lookups, and retrieval functions, that are shared within the Network Security research group at Aalborg University, and also availble to the public for reuse and modification.\n\nDocumentation can be found at https://richkit.readthedocs.io/en/latest/.\n\n\n## Requirements\n\n - `Python \u003e= 3.5` \n\n## Installation\n\nIn order to install richikit just type in the terminal `pip install richkit`\n\n## Usage\n\nThe following codes can be used to retrieve the TLD and the URL category, respectively.\n\n- Retriving effective top level domain of a given url: \n\n    ```python3\n    \u003e\u003e\u003e from richkit.analyse import tld\n    \u003e\u003e\u003e urls = [\"www.aau.dk\",\"www.github.com\",\"www.google.com\"]\n    \u003e\u003e\u003e\n    \u003e\u003e\u003e for url in urls:\n    ...     print(tld(url))\n    dk\n    com\n    com\n    \n    ```\n\n- Retriving category of a given url:\n\n    ```python3\n    \u003e\u003e\u003e from richkit.retrieve.symantec import fetch_from_internet\n    \u003e\u003e\u003e from richkit.retrieve.symantec import LocalCategoryDB\n    \u003e\u003e\u003e\n    \u003e\u003e\u003e urls = [\"www.aau.dk\",\"www.github.com\",\"www.google.com\"]\n    \u003e\u003e\u003e\n    \u003e\u003e\u003e local_db = LocalCategoryDB()\n    \u003e\u003e\u003e for url in urls:\n    ...     url_category=local_db.get_category(url)\n    ...     if url_category=='':\n    ...         url_category=fetch_from_internet(url)\n    ...     print(url_category)\n    Education\n    Technology/Internet\n    Search Engines/Portals\n    \n    ```\n\n## Modules\n\nRichkit define a set of functions categorized by the following modules:\n\n- `richkit.analyse`: This module provides functions that can be applied to a domain  name. Similarly to `richkit.lookup`, and in contrast to `richkit.retrieve`, this is done without disclosing the domain name to third parties and breaching confidentiality.\n\n- `richkit.lookup`: This modules provides the ability to look up domain names in local resources, i.e. the domain name cannot be sent of to third parties. The module might fetch resources, such as lists or databasese, but this must be done in a way that keeps the domain name confidential. Contrast this with `richkit.retrieve`.\n\n- `richkit.retrieve`: This module provides the ability to retrieve data on domain names of any sort. It comes without the \"confidentiality contract\" of `richkit.lookup`.\n\n## Run Tests on Docker \n\nIn order to prevent any problems regarding to environment, we are providing `Dockerfile.test`  file which basically constructs a docker image to run tests of Richkit.\n\n - The only thing to add is just `MAXMIND_LICENCE_KEY` in `.github/local-test/run-test.sh` at line 3. It is required to pass the test cases for `lookup` module. \n\nCommands to test them in Docker environment. \n\n- `docker build -t richkit-test -f Dockerfile.test . ` : Builds required image to run test cases \n\n- `docker run -e MAXMIND_LICENSE_KEY=\"\u003clicence-key\u003e \" richkit-test ` : Runs `run-test.sh` file in Docker image. \n\n\n## Contributing\n\nContributions are most welcome.\n\nWe use the [gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow)\nbranching strategy, so if you plan to push a branch to this repository\nplease follow that. Note that we test branch names with\n`.githooks/check-branch-name.py`. The git pre-commit hook can be used\nto automatically check this on commit. An example that can be used\ndirectly as follows is available on linux, and can be enabled like\nthis (assuming `python\u003e=3.6` and `bash`):\n\n    ln -s $(pwd)/.githooks/pre-commit.linux.sample $(pwd)/.git/hooks/pre-commit\n\n## Credits \n\n-  Logo designed by [indepedenthand](https://www.behance.net/independenthand)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faau-network-security%2Frichkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faau-network-security%2Frichkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faau-network-security%2Frichkit/lists"}