context menu option

This commit is contained in:
overcuriousity 2025-09-15 21:27:21 +02:00
parent e2d4e12057
commit 93a258170a
8 changed files with 283 additions and 6 deletions

View File

@ -1 +1 @@
{"domain":"coturn.ms-it-services.de","first_cached":"2025-09-14T21:03:44.169328+00:00","last_upstream_query":"2025-09-15T08:33:17.764021+00:00","upstream_query_count":2,"certificates":[{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14781803935,"entry_timestamp":"2024-10-03T09:53:12.473","not_before":"2024-10-03T08:54:42","not_after":"2025-01-01T08:54:41","serial_number":"0395c04e522a2715eebcb7fc4ffb3da1fdba","result_count":2},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14781794097,"entry_timestamp":"2024-10-03T09:53:12.142","not_before":"2024-10-03T08:54:42","not_after":"2025-01-01T08:54:41","serial_number":"0395c04e522a2715eebcb7fc4ffb3da1fdba","result_count":2},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14773518990,"entry_timestamp":"2024-10-02T19:20:49.687","not_before":"2024-10-02T18:22:19","not_after":"2024-12-31T18:22:18","serial_number":"04f26242ac1b2ac659ac2e19ae2522ce3274","result_count":2},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14773501988,"entry_timestamp":"2024-10-02T19:20:49.356","not_before":"2024-10-02T18:22:19","not_after":"2024-12-31T18:22:18","serial_number":"04f26242ac1b2ac659ac2e19ae2522ce3274","result_count":2}]} {"domain":"coturn.ms-it-services.de","first_cached":"2025-09-14T21:03:44.169328+00:00","last_upstream_query":"2025-09-15T19:08:39.390556+00:00","upstream_query_count":3,"certificates":[{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14781803935,"entry_timestamp":"2024-10-03T09:53:12.473","not_before":"2024-10-03T08:54:42","not_after":"2025-01-01T08:54:41","serial_number":"0395c04e522a2715eebcb7fc4ffb3da1fdba","result_count":2},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14781794097,"entry_timestamp":"2024-10-03T09:53:12.142","not_before":"2024-10-03T08:54:42","not_after":"2025-01-01T08:54:41","serial_number":"0395c04e522a2715eebcb7fc4ffb3da1fdba","result_count":2},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14773518990,"entry_timestamp":"2024-10-02T19:20:49.687","not_before":"2024-10-02T18:22:19","not_after":"2024-12-31T18:22:18","serial_number":"04f26242ac1b2ac659ac2e19ae2522ce3274","result_count":2},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"coturn.ms-it-services.de","name_value":"coturn.ms-it-services.de","id":14773501988,"entry_timestamp":"2024-10-02T19:20:49.356","not_before":"2024-10-02T18:22:19","not_after":"2024-12-31T18:22:18","serial_number":"04f26242ac1b2ac659ac2e19ae2522ce3274","result_count":2}]}

188
cache/crtsh/mx00_kundenserver_de.json vendored Normal file
View File

@ -0,0 +1,188 @@
{
"domain": "mx00.kundenserver.de",
"first_cached": "2025-09-15T19:23:52.908544+00:00",
"last_upstream_query": "2025-09-15T19:23:52.908548+00:00",
"upstream_query_count": 1,
"certificates": [
{
"issuer_ca_id": 245439,
"issuer_name": "C=DE, O=Deutsche Telekom Security GmbH, CN=Telekom Security ServerID OV Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 17921174855,
"entry_timestamp": "2025-04-18T11:32:56.685",
"not_before": "2024-05-14T10:13:42",
"not_after": "2025-05-18T23:59:59",
"serial_number": "01f21195d95cb3f63712c59f40b2f75c",
"result_count": 1
},
{
"issuer_ca_id": 245439,
"issuer_name": "C=DE, O=Deutsche Telekom Security GmbH, CN=Telekom Security ServerID OV Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 17755974719,
"entry_timestamp": "2025-04-10T06:20:35.546",
"not_before": "2025-04-10T06:20:33",
"not_after": "2026-04-14T23:59:59",
"serial_number": "27efd5b7b17610e4ae86d40dea979ad7",
"result_count": 1
},
{
"issuer_ca_id": 245439,
"issuer_name": "C=DE, O=Deutsche Telekom Security GmbH, CN=Telekom Security ServerID OV Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 13038507917,
"entry_timestamp": "2024-05-14T10:13:43.64",
"not_before": "2024-05-14T10:13:42",
"not_after": "2025-05-18T23:59:59",
"serial_number": "01f21195d95cb3f63712c59f40b2f75c",
"result_count": 1
},
{
"issuer_ca_id": 245439,
"issuer_name": "C=DE, O=Deutsche Telekom Security GmbH, CN=Telekom Security ServerID OV Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 9700366741,
"entry_timestamp": "2023-06-20T11:08:14.981",
"not_before": "2023-06-20T11:08:11",
"not_after": "2024-06-24T23:59:59",
"serial_number": "153f3cd769500d3eebec07c90476d817",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 7107715703,
"entry_timestamp": "2022-07-12T10:00:03.026",
"not_before": "2022-07-12T10:00:01",
"not_after": "2023-07-16T23:59:59",
"serial_number": "210a3739eb290b28d1199f6a9c04d294",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 4981516894,
"entry_timestamp": "2021-08-04T08:35:13.1",
"not_before": "2021-08-04T08:35:11",
"not_after": "2022-08-08T23:59:59",
"serial_number": "11ae5449f5d5cc2a5ec198105748f927",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 2864694015,
"entry_timestamp": "2020-05-28T07:54:38.37",
"not_before": "2020-05-28T07:54:37",
"not_after": "2022-06-02T23:59:59",
"serial_number": "325b678601aae53e99926c1834988786",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 2857249553,
"entry_timestamp": "2020-05-26T09:01:33.944",
"not_before": "2020-05-26T09:01:33",
"not_after": "2022-05-31T23:59:59",
"serial_number": "0ceee698ba17a744881fbb3998c05748",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 2857204010,
"entry_timestamp": "2020-05-26T08:46:52.8",
"not_before": "2020-05-26T08:46:52",
"not_after": "2022-05-31T23:59:59",
"serial_number": "0ac520de92fde640943c1d2c0eb2f6e8",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 2856876813,
"entry_timestamp": "2020-05-26T06:58:49.881",
"not_before": "2020-05-26T06:58:49",
"not_after": "2022-05-31T23:59:59",
"serial_number": "2f9201af62a3408df1579b8a39c0f7b6",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 1351991065,
"entry_timestamp": "2019-04-05T05:26:06.601",
"not_before": "2019-02-18T09:14:39",
"not_after": "2021-02-23T23:59:59",
"serial_number": "2c12501e6e490dd60bfb87d85edad1d1",
"result_count": 1
},
{
"issuer_ca_id": 6069,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass Class 2 CA",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 1213296236,
"entry_timestamp": "2019-02-18T09:14:39.61",
"not_before": "2019-02-18T09:14:39",
"not_after": "2021-02-23T23:59:59",
"serial_number": "2c12501e6e490dd60bfb87d85edad1d1",
"result_count": 1
},
{
"issuer_ca_id": 1375,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=NRW, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass DE-1",
"common_name": "mx00.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 370285812,
"entry_timestamp": "2018-03-30T01:09:17.252",
"not_before": "2013-08-06T15:49:56",
"not_after": "2014-08-11T23:59:59",
"serial_number": "00f17c74ae3d6e7a5c",
"result_count": 2
},
{
"issuer_ca_id": 1477,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass DE-2",
"common_name": "mx.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 307747879,
"entry_timestamp": "2018-01-19T09:01:19.72",
"not_before": "2017-03-22T10:21:38",
"not_after": "2019-03-27T23:59:59",
"serial_number": "00bf95dcc292d7bf01",
"result_count": 1
},
{
"issuer_ca_id": 1477,
"issuer_name": "C=DE, O=T-Systems International GmbH, OU=T-Systems Trust Center, ST=Nordrhein Westfalen, postalCode=57250, L=Netphen, street=Untere Industriestr. 20, CN=TeleSec ServerPass DE-2",
"common_name": "mx00.kundenserver.de",
"name_value": "mx00.kundenserver.de",
"id": 14627870,
"entry_timestamp": "2016-03-08T11:54:51.83",
"not_before": "2014-07-22T11:15:15",
"not_after": "2017-07-27T23:59:59",
"serial_number": "20e14d5c7f18e199",
"result_count": 2
}
]
}

1
cache/crtsh/mx01_kundenserver_de.json vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1,32 @@
{"domain":"www.overcuriousity.org","first_cached":"2025-09-14T21:16:24.041839+00:00","last_upstream_query":"2025-09-15T08:33:07.990411+00:00","upstream_query_count":2,"certificates":[{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"signaling.mikoshi.de","name_value":"www.overcuriousity.org","id":19208272013,"entry_timestamp":"2025-06-23T18:20:29.619","not_before":"2025-06-23T17:21:56","not_after":"2025-09-21T17:21:55","serial_number":"0540be6c8cb99dcaa5492af7b934f40466f9","result_count":1},{"issuer_ca_id":295819,"issuer_name":"C=US, O=Let's Encrypt, CN=E6","common_name":"signaling.mikoshi.de","name_value":"www.overcuriousity.org","id":19208263539,"entry_timestamp":"2025-06-23T18:20:26.82","not_before":"2025-06-23T17:21:56","not_after":"2025-09-21T17:21:55","serial_number":"0540be6c8cb99dcaa5492af7b934f40466f9","result_count":1}]} {
"domain": "www.overcuriousity.org",
"first_cached": "2025-09-14T21:16:24.041839+00:00",
"last_upstream_query": "2025-09-15T19:08:25.160183+00:00",
"upstream_query_count": 3,
"certificates": [
{
"issuer_ca_id": 295819,
"issuer_name": "C=US, O=Let's Encrypt, CN=E6",
"common_name": "signaling.mikoshi.de",
"name_value": "www.overcuriousity.org",
"id": 19208272013,
"entry_timestamp": "2025-06-23T18:20:29.619",
"not_before": "2025-06-23T17:21:56",
"not_after": "2025-09-21T17:21:55",
"serial_number": "0540be6c8cb99dcaa5492af7b934f40466f9",
"result_count": 1
},
{
"issuer_ca_id": 295819,
"issuer_name": "C=US, O=Let's Encrypt, CN=E6",
"common_name": "signaling.mikoshi.de",
"name_value": "www.overcuriousity.org",
"id": 19208263539,
"entry_timestamp": "2025-06-23T18:20:26.82",
"not_before": "2025-06-23T17:21:56",
"not_after": "2025-09-21T17:21:55",
"serial_number": "0540be6c8cb99dcaa5492af7b934f40466f9",
"result_count": 1
}
]
}

View File

@ -561,6 +561,16 @@ input[type="text"]:focus, select:focus {
color: #00ff41; color: #00ff41;
} }
.graph-context-menu ul li[disabled] {
color: #666;
cursor: not-allowed;
}
.graph-context-menu ul li[disabled]:hover {
background-color: #2a2a2a;
color: #666;
}
.graph-placeholder { .graph-placeholder {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@ -68,6 +68,7 @@ class GraphManager {
this.trueRootIds = new Set(); this.trueRootIds = new Set();
// Track large entity members for proper hiding // Track large entity members for proper hiding
this.largeEntityMembers = new Set(); this.largeEntityMembers = new Set();
this.isScanning = false;
this.options = { this.options = {
nodes: { nodes: {
@ -1002,8 +1003,7 @@ class GraphManager {
} }
} }
/* /* * @param {Set} excludedNodeIds - Node IDs to exclude from analysis (for simulation)
* @param {Set} excludedNodeIds - Node IDs to exclude from analysis (for simulation)
* @param {Set} excludedEdgeTypes - Edge types to exclude from traversal * @param {Set} excludedEdgeTypes - Edge types to exclude from traversal
* @param {Set} excludedNodeTypes - Node types to exclude from traversal * @param {Set} excludedNodeTypes - Node types to exclude from traversal
* @returns {Object} Analysis results with reachable/unreachable nodes * @returns {Object} Analysis results with reachable/unreachable nodes
@ -1400,14 +1400,30 @@ class GraphManager {
*/ */
showContextMenu(nodeId, event) { showContextMenu(nodeId, event) {
console.log('Showing context menu for node:', nodeId); console.log('Showing context menu for node:', nodeId);
const node = this.nodes.get(nodeId);
// Create menu items // Create menu items
this.contextMenu.innerHTML = ` let menuItems = `
<ul> <ul>
<li data-action="focus" data-node-id="${nodeId}"> <li data-action="focus" data-node-id="${nodeId}">
<span class="menu-icon">🎯</span> <span class="menu-icon">🎯</span>
<span>Focus on Node</span> <span>Focus on Node</span>
</li> </li>
`;
// Add "Iterate Scan" option only for domain or IP nodes
if (node && (node.type === 'domain' || node.type === 'ip')) {
const disabled = this.isScanning ? 'disabled' : ''; // Check if scanning
const title = this.isScanning ? 'A scan is already in progress' : 'Iterate Scan (Add to Graph)'; // Add a title for disabled state
menuItems += `
<li data-action="iterate" data-node-id="${nodeId}" ${disabled} title="${title}">
<span class="menu-icon"></span>
<span>Iterate Scan (Add to Graph)</span>
</li>
`;
}
menuItems += `
<li data-action="hide" data-node-id="${nodeId}"> <li data-action="hide" data-node-id="${nodeId}">
<span class="menu-icon">👁🗨</span> <span class="menu-icon">👁🗨</span>
<span>Hide Node</span> <span>Hide Node</span>
@ -1423,6 +1439,8 @@ class GraphManager {
</ul> </ul>
`; `;
this.contextMenu.innerHTML = menuItems;
// Position the menu // Position the menu
this.contextMenu.style.left = `${event.clientX}px`; this.contextMenu.style.left = `${event.clientX}px`;
this.contextMenu.style.top = `${event.clientY}px`; this.contextMenu.style.top = `${event.clientY}px`;
@ -1440,6 +1458,10 @@ class GraphManager {
// Add event listeners to menu items // Add event listeners to menu items
this.contextMenu.querySelectorAll('li').forEach(item => { this.contextMenu.querySelectorAll('li').forEach(item => {
item.addEventListener('click', (e) => { item.addEventListener('click', (e) => {
if (e.currentTarget.hasAttribute('disabled')) { // Prevent action if disabled
e.stopPropagation();
return;
}
e.stopPropagation(); e.stopPropagation();
const action = e.currentTarget.dataset.action; const action = e.currentTarget.dataset.action;
const nodeId = e.currentTarget.dataset.nodeId; const nodeId = e.currentTarget.dataset.nodeId;
@ -1471,6 +1493,13 @@ class GraphManager {
this.focusOnNode(nodeId); this.focusOnNode(nodeId);
break; break;
case 'iterate':
const event = new CustomEvent('iterateScan', {
detail: { nodeId }
});
document.dispatchEvent(event);
break;
case 'hide': case 'hide':
// Use enhanced method with reachability analysis // Use enhanced method with reachability analysis
this.hideNodeWithReachabilityAnalysis(nodeId); this.hideNodeWithReachabilityAnalysis(nodeId);

View File

@ -193,6 +193,18 @@ class DNSReconApp {
document.addEventListener('nodeSelected', (e) => { document.addEventListener('nodeSelected', (e) => {
this.showNodeModal(e.detail.node); this.showNodeModal(e.detail.node);
}); });
// Listen for the new iterateScan event from the graph context menu
document.addEventListener('iterateScan', (e) => {
if (this.isScanning) {
this.showWarning('A scan is already in progress.');
return;
}
const { nodeId } = e.detail;
console.log(`Received iterateScan event for node: ${nodeId}`);
this.elements.targetInput.value = nodeId;
this.startScan(false); // Start scan in "add to graph" mode
});
// Keyboard shortcuts // Keyboard shortcuts
document.addEventListener('keydown', (e) => { document.addEventListener('keydown', (e) => {
@ -671,6 +683,9 @@ class DNSReconApp {
switch (state) { switch (state) {
case 'scanning': case 'scanning':
this.isScanning = true; this.isScanning = true;
if (this.graphManager) {
this.graphManager.isScanning = true;
}
if (this.elements.startScan) { if (this.elements.startScan) {
this.elements.startScan.disabled = true; this.elements.startScan.disabled = true;
this.elements.startScan.classList.add('loading'); this.elements.startScan.classList.add('loading');
@ -695,6 +710,9 @@ class DNSReconApp {
case 'failed': case 'failed':
case 'stopped': case 'stopped':
this.isScanning = false; this.isScanning = false;
if (this.graphManager) {
this.graphManager.isScanning = false;
}
if (this.elements.startScan) { if (this.elements.startScan) {
this.elements.startScan.disabled = !isQueueEmpty; this.elements.startScan.disabled = !isQueueEmpty;
this.elements.startScan.classList.remove('loading'); this.elements.startScan.classList.remove('loading');