{"id":13597708,"url":"https://github.com/typosquatter/ail-typo-website","last_synced_at":"2026-04-08T20:02:04.047Z","repository":{"id":44476477,"uuid":"510737696","full_name":"typosquatter/ail-typo-website","owner":"typosquatter","description":"Website for ail-typo-squatting library","archived":false,"fork":false,"pushed_at":"2026-02-25T12:38:53.000Z","size":3880,"stargazers_count":72,"open_issues_count":0,"forks_count":8,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-02-25T16:38:39.879Z","etag":null,"topics":["misp","threat-intelligence","typosquatting","typosquatting-domains"],"latest_commit_sha":null,"homepage":"https://typosquatting-finder.circl.lu/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/typosquatter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-05T12:59:44.000Z","updated_at":"2026-02-25T12:38:57.000Z","dependencies_parsed_at":"2024-05-31T14:46:42.975Z","dependency_job_id":"835816d9-42fc-451a-8a39-9b04c4b71c04","html_url":"https://github.com/typosquatter/ail-typo-website","commit_stats":null,"previous_names":["typosquatter/ail-typo-website","ail-project/ail-typo-website"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/typosquatter/ail-typo-website","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typosquatter%2Fail-typo-website","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typosquatter%2Fail-typo-website/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typosquatter%2Fail-typo-website/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typosquatter%2Fail-typo-website/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typosquatter","download_url":"https://codeload.github.com/typosquatter/ail-typo-website/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typosquatter%2Fail-typo-website/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31571601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["misp","threat-intelligence","typosquatting","typosquatting-domains"],"created_at":"2024-08-01T17:00:39.458Z","updated_at":"2026-04-08T20:02:04.014Z","avatar_url":"https://github.com/typosquatter.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# ail-typo-website\n\nWebsite for [ail-typo-squatting](https://github.com/typosquatter/ail-typo-squatting) library. This website is strongly inspired by [dnstwist website](https://dnstwist.it).\n\n![typo-website](https://github.com/ail-project/ail-typo-website/blob/main/doc/typo-website.png?raw=true)\n\n## Requirements\n\n- [requests](https://github.com/psf/requests)\n- [flask](https://flask.palletsprojects.com/en/2.1.x/)\n- [flask-restx](https://github.com/python-restx/flask-restx)\n  - [werkzeug](https://github.com/pallets/werkzeug/)\n- [ail-typo-squatting](https://github.com/typosquatter/ail-typo-squatting)\n- [idna](https://github.com/kjd/idna)\n- [redis](https://github.com/redis/redis-py)\n- [tldextract](https://github.com/john-kurkowski/tldextract )\n- [pymisp](https://github.com/MISP/PyMISP)\n- [beautifulsoup4](https://pypi.org/project/beautifulsoup4/)\n- [nltk](https://github.com/nltk/nltk)\n- [scikit-learn](https://github.com/scikit-learn/scikit-learn)\n\n## How to run\n\nThe main script to run is `Flask_server.py`, but you might start with:\n\n- Fill `conf/conf.cfg`\n- If you want to have some [misp-warninglists](https://github.com/MISP/misp-warninglists)\n  - run  `external_script/warning_list/generate_warning_list.py`\n\n## Choice of algorithm\n\nIn the `Advanced` option, it's possible to choose algorithms to generate variations from a domain name.\n\nThere's 20 algorithms which can be chosen. List can be found [here](https://github.com/typosquatter/ail-typo-squatting#list-of-algorithms-used).\n\n## Download results\n\nAfter a search, the list of variations can be download to be reused, and also the result can be download to Json format. \n\n## Misp feed-json\n\nAfter a search, under the `download` button, it'll be possible to download a Misp event at Json format or go to the page of misp-feed.\n\n## Share\n\nIt's possible to share the session by copied the url given by the `share` button who will spawn at the end of a search.\n\n**Notice**: a session is keep for 1h at the moment\n\n## Session db\n\nWhen a search is done, results are store into a redis db in order to be able to share a session or to be faster the second time a domain is search.\n\n- `session_uuid`:\n  - `url` : domain\n  - `result_list` : all the result of dns query (Will be remove)\n  - `variations_list` : list of variations (Useful for status)\n  - `stopped` : boolean to know if the session was stopped (Useful in case someone else search for the same domain)\n  - `md5url` : md5sum of the domain\n  - `request_algo` : list of algo used for the search (Useful to return only result of the session)\n- md5 of the domain: used to know if the domain was already searched\n- `md5_of_domain:algo` : list of the result for a given algo (Used in case different people search for the same domain with different algo)\n- `event_manifest:session_uuid` : manifest of event\n- `event_hashes:session_uuid` : hashes of event\n- `event_json:session_uuid` : json of event\n\n## API\n\nThis will work only if **`Flask_api.py`** is running.\n\nFirst, you need to get your *sid* passing the address you want to analyse:\n\n```\ncurl http://localhost:7006/scan/\u003curl\u003e\n```\n\nSecond, result from dns check can be obtain using:\n\n```\ncurl http://localhost:7006/domains/\u003csid\u003e\n```\n\n### Parameters\n\nBy passing parameters to the request, it's possible to choose algorithms to run.\n\n```\ncurl \"http://localhost:7006/scan/url?charom\u0026add\"\n```\n\n- `runAll`\n\n- `addDash`\n\n- `addTld`\n\n- `addition`\n\n- `changeDotDash`\n\n- `changeOrder`\n\n- `commonMisspelling`\n\n- `doubleReplacement`\n\n- `homoglyph`\n\n- `homophones`\n\n- `missingDot`\n\n- `omission`\n\n- `repetition`\n\n- `replacement`\n\n- `singularPluralize`\n\n- `stripDash`\n\n- `vowelSwap`\n\n- `wrongTld`\n\n### Output\n\n```json\n[\n{\"circl.lu\":{\"A\":[\"185.194.93.14\"],\"AAAA\":[\"2a00:5980:93::14\"],\"MX\":[\"10 cppy.circl.lu.\"],\"NS\":[\"ns3.eurodns.com.\",...],\"NotExist\":false,\"geoip\":\"Luxembourg\"}}, ...\n{\"complete\":1535,\"id\":\"3322fa4f-52a0-43cb-a057-22bc07bdde01\",\"registered\":2,\"remaining\":4372,\"total\":5907} \n]\n```\n\nThe status of the current scan can be found at the end of the json output with : \n\n`complete`: Number of variations check\n\n`id`: id of the current scan\n\n`registered`: Number of variations which can be accessible with dns\n\n`remaining`: Number of variations  to check to finish the scan\n\n`total`: Number of variations generated\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyposquatter%2Fail-typo-website","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftyposquatter%2Fail-typo-website","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftyposquatter%2Fail-typo-website/lists"}