{"id":20425241,"url":"https://github.com/pablojorge/nmap-os-db-analyzer","last_synced_at":"2026-06-05T08:31:09.577Z","repository":{"id":5975291,"uuid":"7197197","full_name":"pablojorge/nmap-os-db-analyzer","owner":"pablojorge","description":"Cluster OS fingerprints by similarity","archived":false,"fork":false,"pushed_at":"2022-02-23T11:02:31.000Z","size":648,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-05T04:44:56.956Z","etag":null,"topics":["graphviz","haskell","nmap","visualization"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pablojorge.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}},"created_at":"2012-12-17T00:24:54.000Z","updated_at":"2025-01-10T06:33:16.000Z","dependencies_parsed_at":"2022-09-03T20:12:33.722Z","dependency_job_id":null,"html_url":"https://github.com/pablojorge/nmap-os-db-analyzer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pablojorge/nmap-os-db-analyzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablojorge%2Fnmap-os-db-analyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablojorge%2Fnmap-os-db-analyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablojorge%2Fnmap-os-db-analyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablojorge%2Fnmap-os-db-analyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pablojorge","download_url":"https://codeload.github.com/pablojorge/nmap-os-db-analyzer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pablojorge%2Fnmap-os-db-analyzer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33937661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"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":["graphviz","haskell","nmap","visualization"],"created_at":"2024-11-15T07:12:39.834Z","updated_at":"2026-06-05T08:31:09.557Z","avatar_url":"https://github.com/pablojorge.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NMap OS DB Analyzer\n\nThe original purpose of this project was to play with Haskell and apply it to something (relatively) useful. I came up with the idea of parsing the NMap fingerprints database (I was doing something related to this at work) and then compare and group them by similarity.\n\nThis is currently the only analysis performed by this tool.\n\n## Fingerprints Clusters\n\nThe program is [clusters.hs](nmap-os-db-analyzer/blob/master/clusters.hs). It expects 3 arguments: input filename, distance threshold, output filename. The input file is the `nmap-os-db` file shipped with [nmap](http://nmap.org/). The threshold specifies how distant can be the fingerprints from each other in order to be grouped together. This means that a higher threshold allows a greater distance, so fewer groups with a higher number of (not so similar) fingerprints will be generated. A smaller threshold will only allow very similar fingerprints to be grouped together.\n\nThe program will print how many groups were formed, and dump a graph in graphviz format in the output file given as argument. That graph must be then rendered using the fdp algorithm.\n\nTo install graphviz: \n\n * Mac OS X (Macports): `sudo port install graphviz`\n * Ubuntu: `sudo apt-get install graphviz`\n\n### Sample\n\n    $ time runhaskell clusters.hs /opt/local/share/nmap/nmap-os-db 17 output.gv\n\tClusters count: 156\n\n\treal\t0m6.743s\n\tuser\t0m6.541s\n\tsys\t0m0.218s\n\n    $ time fdp -Tsvgz -o output.svgz output.gv \n\n\treal\t0m17.829s\n\tuser\t0m17.511s\n\tsys\t0m0.298s\n\nGenerated graph:\n\n![Sample graph](nmap-os-db-analyzer/raw/master/sample.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpablojorge%2Fnmap-os-db-analyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpablojorge%2Fnmap-os-db-analyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpablojorge%2Fnmap-os-db-analyzer/lists"}