Last active
January 20, 2016 16:09
-
-
Save ikiril01/51d1803d6a917789c786 to your computer and use it in GitHub Desktop.
CybOX Visualization Test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "CybOX 3.0", | |
"children": [ | |
{"name":"Core Components", | |
"children": [{"name":"CybOX Core", "size": 5234}, | |
{"name":"CybOX Common", "size":3434}, | |
{"name":"CybOX Vocabularies", "size":2343}] | |
}, | |
{ | |
"name": "Objects", | |
"children":[{"name":"Network Objects", | |
"size": 12000, | |
"children":[{"name":"AS", "size":1500}, | |
{"name":"Address", "size":3000, | |
"children":[{"name":"IPv4 Address", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-Address-Object-Refactoring#refactoring---new-objects"}, | |
{"name":"IPv6 Address", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-Address-Object-Refactoring#refactoring---new-objects"}, | |
{"name":"IP Address", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-Address-Object-Refactoring#refactoring---new-objects"}, | |
{"name":"MAC Address", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-Address-Object-Refactoring#refactoring---new-objects"}, | |
{"name":"Email Address", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-Address-Object-Refactoring#refactoring---new-objects"}]}, | |
{"name":"DNS Cache", "size":1500}, | |
{"name":"DNS Query", "size":1500}, | |
{"name":"DNS Record", "size":1500}, | |
{"name":"Domain Name", "size":1200}, | |
{"name":"Net Route", "size":1500}, | |
{"name":"Network Connection", "size":1800, "likely_update":true}, | |
{"name":"Network Flow", "size":2400}, | |
{"name":"Network Packet", "size":2700, "likely_update":true}, | |
{"name":"Network Subnet", "size":1200}, | |
{"name":"Socket Address", "size":1200}, | |
{"name":"Port", "size":900}, | |
{"name":"URI", "size":900}, | |
{"name":"WHO_IS", "size":1500} | |
]}, | |
{"name":"Host-related Objects", "size": 20000, | |
"children":[{"name":"File-related", "size":8000, | |
"children":[{"name":"File", "size":2000, | |
"children":[{"name":"File Metadata Extension", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#filemetadataextension"}, | |
{"name":"EXT3 File Extension", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#ext3fileextension"}, | |
{"name":"NTFS File Extension", "size":900, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#ntfsfileextension"}, | |
{"name":"Image File Extension", "size":1200, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#imagefileextension"}, | |
{"name":"PDF File Extension", "size":1200, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#pdffileextension"}, | |
{"name":"PE File Extension", "size":1500, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#pebinaryfileextension"}, | |
{"name":"Archive File Extension", "size":1200, "is_new":true, | |
"url":"https://github.com/CybOXProject/schemas/wiki/CybOX-3.0:-File-Object-Refactoring#archivefileextension"}]}, | |
{"name":"Pipe", "size":900, "likely_update":"true"}, | |
{"name":"UNIX Pipe", "size":900, "likely_update":"true"}, | |
{"name":"Windows Pipe", "size":900, "likely_update":"true"}, | |
{"name":"Windows Filemapping", "size":1200}, | |
{"name":"Library", "size":900, "likely_update":true}]}, | |
{"name":"Disk-related", "size":4000, | |
"children":[{"name":"Disk", "size":1200, "likely_update":true}, | |
{"name":"Disk Partition", "size":900}, | |
{"name":"Volume", "size":1200}, | |
{"name":"UNIX Volume", "size":1200}, | |
{"name":"Windows Volume", "size":1200}]}, | |
{"name":"OS Metadata", "size":12000}, | |
{"name":"Logging", "size":2400, | |
"children":[{"name":"Windows Event", "size":1200}, | |
{"name":"Windows Event Log", "size":1200}]}, | |
{"name":"SMS Message", "size":900}, | |
{"name":"Network-Related", "size":10000, | |
"children":[{"name":"ARP Cache", "size":1200}, | |
{"name":"Network Route Entry", "size":1200}, | |
{"name":"Unix Network Route Entry", "size":900}, | |
{"name":"Windows Network Route Entry", "size":900}, | |
{"name":"Network Socket", "size":900}, | |
{"name":"URL History", "size":1200}]}, | |
{"name":"Misc.", "size":5000} | |
]}] | |
} | |
] | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html xmlns:xlink="http://www.w3.org/1999/xlink"> | |
<meta charset="utf-8"> | |
<style> | |
.node { | |
cursor: pointer; | |
} | |
.node:hover { | |
stroke: #000; | |
stroke-width: 1.5px; | |
} | |
.node--leaf { | |
fill: white; | |
} | |
.label { | |
font: 13px "Helvetica Neue", Helvetica, Arial, sans-serif; | |
text-anchor: middle; | |
text-shadow: 0 1px 0 #fff, 1px 0 0 #fff, -1px 0 0 #fff, 0 -1px 0 #fff; | |
} | |
.label, | |
.node--root, | |
.node--leaf { | |
pointer-events: none; | |
} | |
</style> | |
<body> | |
<script src="http://d3js.org/d3.v3.min.js"></script> | |
<script> | |
var margin = 20, | |
diameter = 1080; | |
var color = d3.scale.linear() | |
.domain([-1, 6]) | |
.range(["hsl(152,80%,80%)", "hsl(228,30%,40%)"]) | |
.interpolate(d3.interpolateHcl); | |
var pack = d3.layout.pack() | |
.padding(2) | |
.size([diameter - margin, diameter - margin]) | |
.value(function(d) { return d.size; }) | |
var svg = d3.select("body").append("svg") | |
.attr("width", diameter) | |
.attr("height", diameter) | |
.append("g") | |
.attr("transform", "translate(" + diameter / 2 + "," + diameter / 2 + ")"); | |
d3.json("cybox_hierarchy.json", function(error, root) { | |
if (error) throw error; | |
var focus = root, | |
nodes = pack.nodes(root), | |
view; | |
var circle = svg.selectAll("circle") | |
.data(nodes) | |
.enter().append("circle") | |
.attr("title", function(d) { return d.name; }) | |
.attr("class", function(d) { if (d.is_new || d.likely_update || d.likely_deprecate) { | |
return "node"; | |
} else if (d.name == "CybOX 3.0") { | |
return "node node--root"; | |
} else if (d.children) { | |
return "node"; | |
} else { | |
return "node node--leaf"; | |
}}) | |
.style("fill", function(d) { if(d.children) { | |
return color(d.depth); | |
} else if (d.is_new) { | |
return "limegreen"; | |
} else if (d.not_included) { | |
return "mediumpurple"; | |
} else if (d.likely_update) { | |
return "palegoldenrod"; | |
} else if (d.likely_deprecate) { | |
return "tomato"; | |
} else { | |
return null; | |
}}) | |
.on("click", function (d) { | |
if (d.is_new || d.likely_update || d.likely_deprecate) { | |
var win = window.open(d.url, '_blank'); | |
} | |
if (focus !== d) zoom(d), d3.event.stopPropagation(); | |
}); | |
var text = svg.selectAll("text") | |
.data(nodes) | |
.enter().append("text") | |
.attr("class", "label") | |
.style("fill-opacity", function(d) { return d.parent === root ? 1 : 0; }) | |
.style("display", function(d) { return d.parent === root ? "inline" : "none"; }) | |
.text(function(d) { return d.name; }) | |
var node = svg.selectAll("circle,text"); | |
d3.select("body") | |
.style("background", color(-1)) | |
.on("click", function() { zoom(root); }); | |
zoomTo([root.x, root.y, root.r * 2 + margin]); | |
function zoom(d) { | |
if (!(d.is_new || d.likely_update || d.likely_deprecate)) { | |
var focus0 = focus; focus = d; | |
var transition = d3.transition() | |
.duration(d3.event.altKey ? 7500 : 750) | |
.tween("zoom", function(d) { | |
var i = d3.interpolateZoom(view, [focus.x, focus.y, focus.r * 2 + margin]); | |
return function(t) { zoomTo(i(t)); }; | |
}); | |
transition.selectAll("text") | |
.filter(function(d) { return d.parent === focus || this.style.display === "inline"; }) | |
.style("fill-opacity", function(d) { return d.parent === focus ? 1 : 0; }) | |
.each("start", function(d) { if (d.parent === focus) this.style.display = "inline"; }) | |
.each("end", function(d) { if (d.parent !== focus) this.style.display = "none"; }); | |
}} | |
function zoomTo(v) { | |
var k = diameter / v[2]; view = v; | |
node.attr("transform", function(d) { return "translate(" + (d.x - v[0]) * k + "," + (d.y - v[1]) * k + ")"; }); | |
circle.attr("r", function(d) { return d.r * k; }); | |
} | |
}); | |
d3.select(self.frameElement).style("height", diameter + "px"); | |
</script> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment