{"id":13510188,"url":"https://github.com/qeeqbox/raven","last_synced_at":"2025-10-13T03:37:21.873Z","repository":{"id":44306041,"uuid":"397346691","full_name":"qeeqbox/raven","owner":"qeeqbox","description":"Advanced Cyber Threat Map (Simplified, customizable, responsive and optimized)","archived":false,"fork":false,"pushed_at":"2023-08-08T22:27:58.000Z","size":25915,"stargazers_count":183,"open_issues_count":3,"forks_count":48,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-03-04T21:24:01.974Z","etag":null,"topics":["attack","countries","cyberattack","d3js","maps","raven","threat-hunting","threat-intelligence","visualization","world"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qeeqbox.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,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-08-17T17:56:15.000Z","updated_at":"2025-02-18T21:22:04.000Z","dependencies_parsed_at":"2024-01-13T19:25:39.616Z","dependency_job_id":"31f136f7-6ad1-4a72-801f-9351c854ab35","html_url":"https://github.com/qeeqbox/raven","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qeeqbox%2Fraven","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qeeqbox%2Fraven/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qeeqbox%2Fraven/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qeeqbox%2Fraven/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qeeqbox","download_url":"https://codeload.github.com/qeeqbox/raven/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244066189,"owners_count":20392406,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["attack","countries","cyberattack","d3js","maps","raven","threat-hunting","threat-intelligence","visualization","world"],"created_at":"2024-08-01T02:01:27.713Z","updated_at":"2025-10-13T03:37:16.838Z","avatar_url":"https://github.com/qeeqbox.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","visualization"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e \u003cimg src=\"https://github.com/qeeqbox/raven/blob/main/readme/ravenlogo.png\"\u003e\u003c/p\u003e\n\nRaven - Advanced Cyber Threat Map (Simplified, customizable and responsive. It uses D3.js with TOPO JSON, has 247 countries, ~100,000 cities, and can be used in an isolated environment **without external lookups!**.\n\n## Structure\n\u003cimg src=\"https://raw.githubusercontent.com/qeeqbox/raven/main/readme/structure.png\" style=\"max-width:768px\"/\u003e\n\n## Offline - Demo [Firefox, Chrome or Safari]\n\u003cimg src=\"https://raw.githubusercontent.com/qeeqbox/raven/main/readme/intro.gif\" style=\"max-width:768px\"/\u003e\n\n## Live - Regression 500 attacks at once [Firefox, Chrome or Safari]\n\u003cimg src=\"https://raw.githubusercontent.com/qeeqbox/raven/main/readme/regression.gif\" style=\"max-width:768px\"/\u003e\n\n## Live - Demo [Firefox, Chrome or Safari]\n[https://qeeqbox.github.io/raven/](https://qeeqbox.github.io/raven/index.html)\n\n## Features\n- Uses D3.js (Not Anime.js)\n- Plot by gussing feature (Mix name, ip or coordinates)\n- Active threat map (Live and replay)\n- IP, country, city, and port info for each attack\n- Attacks stats for countries (Only known attacks)\n- Responsive interface (Move, drag, zoom in and out)\n- Customize options for countries and cites\n- 247 countries are listed on the interface (Not 174)\n- Optimized worldmap for faster rendering\n- Includes IP lookup, port information\n- Random simulation (IP, country, city)\n- Can be used online or offline (Static)\n- Theme picker module\n- Handles large number of attacks\n\n## Data\nYou have different options `ip`, `name`, and `coordinates`\n\n- `ip`            private or public ip -\u003e any of these IPs -\u003e `0.0.0.0` or `8.8.8.8` as `{'from':'0.0.0.0','to':'8.8.8.8'}`\n- `name`          city,state,country -\u003e any of these formats work -\u003e `seattle,wa,us` or `0,us` as `{'from':'seattle,wa,us','to':'0,in'}`\n- `coordinates`   Latitude and Longitude as `{'from'-11.074920','-51.648929'],'to'51.464957','-107.583864']}`\n\n## Method 1 - Embed it and interact with it\n```html\n  //You only need to embed this iframe in your project.\n  \u003ciframe id=\"raven-iframe\" src=\"src/raven.html\" frameborder=\"0\" width=\"100%\" height=\"100%\" scrolling=\"auto\"\u003e\u003c/iframe\u003e\n\n  //Then, run the initialization script with your custom settings - That's all!\n  \u003cscript type=\"text/javascript\"\u003e\n\n    document.getElementById('raven-iframe').addEventListener(\"load\", function() {\n\n      var raven_options = {\n        'world_type': null,\n        'selected_countries': [],\n        'remove_countries': ['aq'],\n        'height': window.innerHeight,\n        'width': window.innerWidth,\n        'backup_background_color': '#212222',\n        'orginal_country_color': '#737373',\n        'clicked_country_color': '#6c4242',\n        'selected_country_color': '#ff726f',\n        'attack_output': true,\n        'global_timeout': 2000,\n        'global_stats_limit': 10,\n        'db_length': 1000,\n        'location': 'scripts',\n        'panels': ['multi-output', 'single-output','tooltip', 'random', 'insert','taskbar'],\n        'disable': [],\n        'verbose': true\n      }\n\n      window['raven'] = document.getElementById('raven-iframe').contentWindow.raven\n      window['raven'].init_all(raven_options)\n      window['raven'].init_world()\n    });\n\n    //After that, you can plot any data you want\n    raven.add_to_data_to_table({'from':'seattle,wa,us','to':'delhi,in'},{'line':{'from':null,'to':null}},2000,['line','multi-output','single-output'])\n\n  \u003c/script\u003e\n```\n\n#### Plotting data (functions)\n```js\nraven.add_marker_by_gussing()       //Plot info by country or city name, ip or coordinates\n\nmarker_object                       //An object {'from':'','to':\"\"} see examples\ncolors_object                       //An object {'line: {'from': ''#FF0000','to': 'FF0000'}} this the color of the line between 2 points - (if null, then a random color will be picked)\ntimeout                             //Animation time out\noptions = []                        //A list of options such as animation marker\n```\n\n#### Plotting data (As line, from -\u003e to)\n```js\nraven.add_marker_by_gussing({'from':'seattle,wa,us','to':'8.8.8.8'},{'line':{'from':null,'to':null}},2000,['line'])\nraven.add_marker_by_gussing({'from':'-11.074920,-51.648929','to':'0.0.0.0:53'},{'line':{'from':'#FF0000','to':'#FF0000'}},1000,['line'])\nraven.add_marker_by_gussing({'from':'-11.074920,-51.648929','to':'us'},{'line':{'from':null,'to':'#FFFF00'}},1000,['line'])\n```\n\n#### Plotting data (As point)\n```js\nraven.add_marker_by_gussing({'from':'portland,or,us','to':null},{'line':{'from':null,'to':null}},2000,['point'])\nraven.add_marker_by_gussing({'from':'8.8.8.8','to':null},{'line':{'from':'#FF0000','to':'#FF0000'}},1000,['point'])\nraven.add_marker_by_gussing({'from':'-11.074920,-51.648929','to':null},{'line':{'from':null,'to':'#FFFF00'}},1000,['point'])\n```\n\n#### Plotting data + adding it to the output table (function)\n```js\nraven.add_to_data_to_table()        //Plot info and add them to the output table\n\nmethod                              //Name, IP or coordinates\nmarker_object                       //An object {'from':'','to':\"\"} see examples\ncolors_object                       //An object {'line: {'from': ''#FF0000','to': 'FF0000'}} this the color of the line between 2 points - (if null, then a random color will be picked)\ntimeout                             //Animation time out\noptions = []                        //A list of options such as animation marker 'line', and plot place 'multi-output' or 'single-out' table or both\n```\n\n#### Plotting data + adding it to the output table (As line, from -\u003e to)\n```js\nraven.add_to_data_to_table({'from':'8.8.8.8','to':'delhi,in'},{'line':{'from':null,'to':null}},2000,['line','multi-output','single-output'])\nraven.add_to_data_to_table({'from':'-11.074920,-51.648929','to':'0.0.0.0:3389'},{'line':{'from':'#FF0000','to':'#FF0000'}},1000,['line','multi-output'])\nraven.add_to_data_to_table({'from':'br','to':'51.464957,-107.583864'},{'line':{'from':null,'to':'#FFFF00'}},1000,['line','single-output'])\n```\n\n#### Plotting data + adding it to the output table (As point)\n```js\nraven.add_to_data_to_table({'from':'seattle,wa,us','to':null},{'line':{'from':null,'to':null}},2000,['line','multi-output','single-output'])\nraven.add_to_data_to_table({'from':'0.0.0.0','to':null},{'line':{'from':'#FF0000','to':'#FF0000'}},1000,['line','multi-output'])\nraven.add_to_data_to_table({'from':'-11.074920,-51.648929','to':null},{'line':{'from':null,'to':'#FFFF00'}},1000,['line','single-output'])\n```\n\n## Method 2 - Embed it, and use websocket for plotting\n#### Raven Map\n```html\n  //You only need to embed this iframe in your project.\n  \u003ciframe id=\"raven-iframe\" src=\"src/raven.html\" frameborder=\"0\" width=\"100%\" height=\"100%\" scrolling=\"auto\"\u003e\u003c/iframe\u003e\n\n  \u003cscript type=\"text/javascript\"\u003e\n\n    document.getElementById('raven-iframe').addEventListener(\"load\", function() {\n\n      var raven_options = {\n        'world_type': null,\n        'selected_countries': [],\n        'remove_countries': ['aq'],\n        'height': window.innerHeight,\n        'width': window.innerWidth,\n        'backup_background_color': '#212222',\n        'orginal_country_color': '#737373',\n        'clicked_country_color': '#6c4242',\n        'selected_country_color': '#ff726f',\n        'attack_output': true,\n        'global_timeout': 2000,\n        'global_stats_limit': 10,\n        'db_length': 1000,\n        'location': 'scripts',\n        'panels': ['single-output'],\n        'disable': ['multi-output','tooltip', 'random', 'insert','taskbar','move_to_country'],\n        'websocket':{'server':'ws://localhost:5678',\n                      'request_timeout':3000},\n        'verbose': false\n      }\n\n      window['raven'] = document.getElementById('raven-iframe').contentWindow.raven\n      window['raven'].init_all(raven_options)\n      window['raven'].init_world()\n      window['raven'].fetch_data_from_server()\n    });\n  \u003c/script\u003e\n```\n\n#### Plotting data - Send the json object using Websocket ws://localhost:5678\n```json\n    {\n    \"function\":\"marker\",\n      \"method\": \"ip\",\n      \"object\": {\n        \"from\": \"0.0.0.0\",\n        \"to\": \"us\"\n      },\n      \"color\": {\n        \"line\": {\n          \"from\": \"#977777\",\n          \"to\": \"#17777\",\n        }\n      },\n      \"timeout\": 1000,\n      \"options\": [\n        \"line\",\n        \"single-output\",\n        \"multi-output\"\n      ]\n    }\n\n```\n\n#### Plotting data and add to table - Send the json object using Websocket ws://localhost:5678\n```json\n    {\n    \"function\":\"table\",\n      \"object\": {\n        \"from\": \"-11.074920,-51.648929\",\n        \"to\": \"br\"\n      },\n      \"color\": {\n        \"line\": {\n          \"from\": \"#977777\",\n          \"to\": \"#17777\",\n        }\n      },\n      \"timeout\": 1000,\n      \"options\": [\n        \"line\",\n        \"single-output\",\n        \"multi-output\"\n      ]\n    }\n\n```\n\n### Run simulation (Isolated)\n```sh\nsudo docker build -t simulation . \u0026\u0026 sudo docker run -p 5678:5678 -p 8080:8080 -it simulation\n```\nThen, go to http://localhost:8080/simulation.html\n\n## Resources\n- Wikipedia, naturalearthdata, d3.js, topojson, jquery, font-awesome, OSINT package, iana, geonames, AFRINIC, APNIC, ARIN, LACNIC and RIPE\n- Let me know if I missed a reference or resource!\n\n## Disclaimer\\Notes\n- The dark gray style is typical in my projects (You can change that if you want)\n- If you need help improving your world map or cyber threat map, reach out, and I might be able to help you!\n\n## Other Projects\n[![](https://github.com/qeeqbox/.github/blob/main/data/analyzer.png)](https://github.com/qeeqbox/analyzer) [![](https://github.com/qeeqbox/.github/blob/main/data/chameleon.png)](https://github.com/qeeqbox/chameleon) [![](https://github.com/qeeqbox/.github/blob/main/data/honeypots.png)](https://github.com/qeeqbox/honeypots) [![](https://github.com/qeeqbox/.github/blob/main/data/osint.png)](https://github.com/qeeqbox/osint) [![](https://github.com/qeeqbox/.github/blob/main/data/url-sandbox.png)](https://github.com/qeeqbox/url-sandbox) [![](https://github.com/qeeqbox/.github/blob/main/data/mitre-visualizer.png)](https://github.com/qeeqbox/mitre-visualizer) [![](https://github.com/qeeqbox/.github/blob/main/data/woodpecker.png)](https://github.com/qeeqbox/woodpecker) [![](https://github.com/qeeqbox/.github/blob/main/data/docker-images.png)](https://github.com/qeeqbox/docker-images) [![](https://github.com/qeeqbox/.github/blob/main/data/seahorse.png)](https://github.com/qeeqbox/seahorse) [![](https://github.com/qeeqbox/.github/blob/main/data/rhino.png)](https://github.com/qeeqbox/rhino)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqeeqbox%2Fraven","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqeeqbox%2Fraven","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqeeqbox%2Fraven/lists"}