Files
OSINT-Cheat-sheet/Web-Based/index.html
2026-01-23 13:37:12 +07:00

349 lines
12 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Jieyab89 OSINT cheat sheet, list OSINT tools, wiki, dataset, article, book , red team OSINT for hackers and OSINT tips and OSINT branch. This repository will grow every time will research, there is a research, science and technology, tutorial. Please use it wisely.">
<meta name="keywords" content="OSINT, SOCMINT, SIGINT, cheat sheet, MASINT, jieyab89">
<meta name="author" content="Jieyab89">
<meta name="robots" content="index, follow">
<meta name="revisit-after" content="7 days">
<meta property="og:title" content="Jieyab89 OSINT Cheat Sheet">
<meta property="og:description" content="Jieyab89 OSINT cheat sheet, list OSINT tools, wiki, dataset, article, book , red team OSINT for hackers and OSINT tips and OSINT branch. This repository will grow every time will research, there is a research, science and technology, tutorial. Please use it wisely">
<meta property="og:image" content="https://private-user-images.githubusercontent.com/71226310/428317009-37d7d761-c1f3-40f5-9ecd-d79457ee8a6e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDMyNTg0OTEsIm5iZiI6MTc0MzI1ODE5MSwicGF0aCI6Ii83MTIyNjMxMC80MjgzMTcwMDktMzdkN2Q3NjEtYzFmMy00MGY1LTllY2QtZDc5NDU3ZWU4YTZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAzMjklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMzI5VDE0MjMxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkNTNlMWQwNmQ4NTNkYjQ0NzBlOTg4NmI1YWZjYzM5OTUyMWE5MDQzMjc1MjBkOTE4YmZiZWUxYTAwZmQxZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qn1nKRcHpLc_b9MH7EwEip5_XFFkWimN_3091SDCvzg">
<meta property="og:url" content="https://github.com/Jieyab89/OSINT-Cheat-sheet">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Jieyab89 OSINT Cheat Sheet">
<meta name="twitter:description" content="Jieyab89 OSINT cheat sheet, list OSINT tools, wiki, dataset, article, book , red team OSINT for hackers and OSINT tips and OSINT branch. This repository will grow every time will research, there is a research, science and technology, tutorial. Please use it wisely">
<meta name="twitter:image" content="https://private-user-images.githubusercontent.com/71226310/428317009-37d7d761-c1f3-40f5-9ecd-d79457ee8a6e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDMyNTg0OTEsIm5iZiI6MTc0MzI1ODE5MSwicGF0aCI6Ii83MTIyNjMxMC80MjgzMTcwMDktMzdkN2Q3NjEtYzFmMy00MGY1LTllY2QtZDc5NDU3ZWU4YTZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAzMjklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMzI5VDE0MjMxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkNTNlMWQwNmQ4NTNkYjQ0NzBlOTg4NmI1YWZjYzM5OTUyMWE5MDQzMjc1MjBkOTE4YmZiZWUxYTAwZmQxZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qn1nKRcHpLc_b9MH7EwEip5_XFFkWimN_3091SDCvzg">
<meta name="twitter:site" content="@jieyab89">
<meta name="theme-color" content="#ffffff">
<meta name="format-detection" content="telephone=no">
<link rel="canonical" href="https://jieyab89.github.io/OSINT-Cheat-sheet/Web-Based/">
<!-- Favicon -->
<link rel="icon" href="https://avatars.githubusercontent.com/u/71226310?s=96&v=4" type="image/x-icon">
<title>Jieyab89 OSINT Cheat Sheet</title>
<script src="https://d3js.org/d3.v6.min.js"></script>
<style>
body {
font-family: 'Courier New', monospace;
background: radial-gradient(ellipse at center, #000015 0%, #000000 100%);
color: #ffffff;
text-align: center;
margin: 0;
padding: 0;
overflow: hidden;
}
#search {
margin: 2px;
padding: 8px;
width: 85%;
max-width: 450px;
font-size: 16px;
border-radius: 5px;
border: none;
}
svg {
width: 100vw;
height: 100vh;
}
.node circle {
stroke: #ffffff;
stroke-width: 5px;
cursor: pointer;
}
.link {
stroke: #888;
stroke-width: 1.5px;
}
text {
font-size: 15px;
fill: #ffffff;
pointer-events: none;
}
.link {
stroke: #888;
stroke-width: 1.2;
fill: none;
stroke-dasharray: 6 6;
animation: flow 1.6s linear infinite;
opacity: 0.9;
}
@keyframes flow {
from {
stroke-dashoffset: 0;
}
to {
stroke-dashoffset: -24;
}
}
</style>
</head>
<body>
<h1>Jieyab89 OSINT Cheat Sheet</h1>
<input type="text" id="search" placeholder="Search by Category Name and Jieyab89 Wiki's">
<svg></svg>
<script>
const BATCH_SIZE = 5;
const BASE_RADIUS = 140;
const DRIFT_SPEED = 0.25;
const SEPARATION_DIST = 42;
const SEPARATION_FORCE = 0.015;
let rawData = [];
let nodes = [];
let links = [];
let nodeMap = new Map();
let urlIndex = new Map();
function rand(min, max) {
return Math.random() * (max - min) + min;
}
function normalizeUrl(url) {
return url.trim().toLowerCase();
}
function linkExists(a, b) {
return links.some(l =>
(l.source === a && l.target === b) ||
(l.source === b && l.target === a)
);
}
fetch('osint_data.json')
.then(r => r.json())
.then(data => {
rawData = data;
initCategories();
requestAnimationFrame(idleMotion);
});
function initCategories(filtered = null) {
nodes = [];
links = [];
nodeMap.clear();
urlIndex.clear();
const data = filtered || rawData;
const cx = innerWidth / 2;
const cy = innerHeight / 2;
data.forEach(cat => {
const n = {
id: cat.category,
label: cat.category,
type: 'category',
_items: cat.items,
_offset: 0,
x: cx + rand(-400, 400),
y: cy + rand(-260, 260),
vx: rand(-DRIFT_SPEED, DRIFT_SPEED),
vy: rand(-DRIFT_SPEED, DRIFT_SPEED),
dragging: false
};
nodes.push(n);
nodeMap.set(n.id, n);
});
render();
}
function handleUrlCorrelation(node) {
if (!node.url) return;
const key = normalizeUrl(node.url);
if (!urlIndex.has(key)) urlIndex.set(key, new Set());
urlIndex.get(key).forEach(otherId => {
if (!linkExists(node.id, otherId)) {
links.push({ source: node.id, target: otherId, type: "correlation" });
}
});
urlIndex.get(key).add(node.id);
}
function expandNode(parent) {
if (!parent._items || parent._offset >= parent._items.length) return;
const start = parent._offset;
const end = Math.min(start + BATCH_SIZE, parent._items.length);
const radius = BASE_RADIUS + (parent.type === 'category' ? 80 : 140);
for (let i = start; i < end; i++) {
const item = parent._items[i];
if (nodeMap.has(item.name)) continue;
const c = {
id: item.name,
label: item.name,
type: parent.type === 'category' ? 'tool' : 'subtool',
url: item.url || null,
parent: parent.id,
_items: item.children || [],
_offset: 0,
x: parent.x + rand(-radius, radius),
y: parent.y + rand(-radius, radius),
vx: rand(-DRIFT_SPEED, DRIFT_SPEED),
vy: rand(-DRIFT_SPEED, DRIFT_SPEED),
dragging: false
};
nodes.push(c);
nodeMap.set(c.id, c);
links.push({ source: parent.id, target: c.id, type: "parent" });
handleUrlCorrelation(c);
}
parent._offset = end;
render();
}
document.getElementById("search").addEventListener("keydown", e => {
if (e.key !== "Enter") return;
const q = e.target.value.trim().toLowerCase();
if (!q) return initCategories();
initCategories(rawData.filter(c =>
c.category.toLowerCase().includes(q)
));
});
let zoomLayer, graphLayer, nodeSel, linkSel;
function render() {
d3.select("svg").selectAll("*").remove();
const svg = d3.select("svg")
.attr("width", innerWidth)
.attr("height", innerHeight)
.call(
d3.zoom()
.scaleExtent([0.3, 5])
.on("zoom", e => {
zoomLayer.attr("transform", e.transform);
})
);
zoomLayer = svg.append("g");
graphLayer = zoomLayer.append("g");
linkSel = graphLayer.selectAll("line")
.data(links)
.enter()
.append("line")
.attr("class", d =>
d.type === "correlation" ? "link correlation" : "link"
);
nodeSel = graphLayer.selectAll("g")
.data(nodes)
.enter()
.append("g")
.attr("transform", d => `translate(${d.x},${d.y})`)
.call(
d3.drag()
.on("start", (e, d) => {
d.dragging = true;
e.sourceEvent.stopPropagation();
})
.on("drag", (e, d) => {
const dx = e.x - d.x;
const dy = e.y - d.y;
d.x = e.x;
d.y = e.y;
nodes.forEach(n => {
if (n.parent === d.id) {
n.x += dx;
n.y += dy;
}
});
update();
})
.on("end", (e, d) => d.dragging = false)
);
nodeSel.append("circle")
.attr("r", d =>
d.type === 'category' ? 18 :
d.type === 'tool' ? 11 : 8
)
.attr("fill", d =>
d.type === 'category' ? "#ff5733" :
d.type === 'tool' ? "#1e90ff" : "#00ffaa"
);
nodeSel.append("text")
.attr("dy", -20)
.attr("text-anchor", "middle")
.attr("font-size", "12px")
.text(d => d.label);
nodeSel
.on("click", (e, d) => d.url && window.open(d.url, "_blank"))
.on("dblclick", (e, d) => expandNode(d));
update();
}
function update() {
nodeSel.attr("transform", d => `translate(${d.x},${d.y})`);
linkSel
.attr("x1", d => nodeMap.get(d.source).x)
.attr("y1", d => nodeMap.get(d.source).y)
.attr("x2", d => nodeMap.get(d.target).x)
.attr("y2", d => nodeMap.get(d.target).y);
}
function idleMotion() {
const cx = innerWidth / 2;
const cy = innerHeight / 2;
const boundX = innerWidth * 0.45;
const boundY = innerHeight * 0.35;
nodes.forEach((a, i) => {
if (a.dragging) return;
a.x += a.vx;
a.y += a.vy;
if (a.x < cx - boundX || a.x > cx + boundX) a.vx *= -1;
if (a.y < cy - boundY || a.y > cy + boundY) a.vy *= -1;
for (let j = i + 1; j < nodes.length; j++) {
const b = nodes[j];
const dx = a.x - b.x;
const dy = a.y - b.y;
const dist = Math.sqrt(dx*dx + dy*dy);
if (dist > 0 && dist < SEPARATION_DIST) {
const push = (SEPARATION_DIST - dist) / SEPARATION_DIST * SEPARATION_FORCE;
a.x += dx * push;
a.y += dy * push;
b.x -= dx * push;
b.y -= dy * push;
}
}
});
update();
requestAnimationFrame(idleMotion);
}
</script>
</body>
</html>