Files
Deep-Package-Inspection/proxy/collectorHelperDpi.js

122 lines
4.5 KiB
JavaScript

// proxy/collectorHelperDpi.js
// ─────────────────────────────────────────────────────────────────────────────
// DPI Property Telemetry collection steps for BackOne Proxy Server.
// Split from collectorHelper.js to satisfy the 256-line file size limit.
// Covers: SNI Hostnames, SSL CN, QUIC, SSH Clients/Servers, mDNS Hostnames.
// ─────────────────────────────────────────────────────────────────────────────
const {
SniHostnameStat,
SslServerCnStat,
QuicHostnameStat,
SshClientStat,
SshServerStat,
MdnsHostnameStat,
} = require('./models/SchemasTelemetry');
async function collectDpiPropertyTelemetry(agentUuid, timestamp, SITE_UUID, netify, label) {
try {
// 2j. HTTPS SNI Hostnames
const sniHostnames = await netify.fetchSniHostnames(1440, 50, agentUuid);
if (sniHostnames && sniHostnames.length > 0) {
const docs = sniHostnames.map(d => ({
timestamp,
agent_uuid: agentUuid,
site_uuid: SITE_UUID,
sni_hostname: d.sni_hostname,
download: d.download || 0,
upload: d.upload || 0,
flows: d.flows || 0,
}));
await SniHostnameStat.insertMany(docs);
console.log(`[Collector] ✓ ${docs.length} SNI hostnames saved for ${label}`);
}
// 2k. SSL Server Common Names
const sslCns = await netify.fetchSslServerCn(1440, 50, agentUuid);
if (sslCns && sslCns.length > 0) {
const docs = sslCns.map(d => ({
timestamp,
agent_uuid: agentUuid,
site_uuid: SITE_UUID,
ssl_server_cn: d.ssl_server_cn,
download: d.download || 0,
upload: d.upload || 0,
flows: d.flows || 0,
}));
await SslServerCnStat.insertMany(docs);
console.log(`[Collector] ✓ ${docs.length} SSL Common Names saved for ${label}`);
}
// 2l. QUIC Hostnames
const quicHostnames = await netify.fetchQuicHostnames(1440, 50, agentUuid);
if (quicHostnames && quicHostnames.length > 0) {
const docs = quicHostnames.map(d => ({
timestamp,
agent_uuid: agentUuid,
site_uuid: SITE_UUID,
quic_hostname: d.quic_hostname,
download: d.download || 0,
upload: d.upload || 0,
flows: d.flows || 0,
}));
await QuicHostnameStat.insertMany(docs);
console.log(`[Collector] ✓ ${docs.length} QUIC hostnames saved for ${label}`);
}
// 2m. SSH Clients
const sshClients = await netify.fetchSshClients(1440, 50, agentUuid);
if (sshClients && sshClients.length > 0) {
const docs = sshClients.map(d => ({
timestamp,
agent_uuid: agentUuid,
site_uuid: SITE_UUID,
ssh_client: d.ssh_client,
download: d.download || 0,
upload: d.upload || 0,
flows: d.flows || 0,
}));
await SshClientStat.insertMany(docs);
console.log(`[Collector] ✓ ${docs.length} SSH clients saved for ${label}`);
}
// 2n. SSH Servers
const sshServers = await netify.fetchSshServers(1440, 50, agentUuid);
if (sshServers && sshServers.length > 0) {
const docs = sshServers.map(d => ({
timestamp,
agent_uuid: agentUuid,
site_uuid: SITE_UUID,
ssh_server: d.ssh_server,
download: d.download || 0,
upload: d.upload || 0,
flows: d.flows || 0,
}));
await SshServerStat.insertMany(docs);
console.log(`[Collector] ✓ ${docs.length} SSH servers saved for ${label}`);
}
// 2o. mDNS Hostnames
const mdnsHostnames = await netify.fetchMdnsHostnames(1440, 50, agentUuid);
if (mdnsHostnames && mdnsHostnames.length > 0) {
const docs = mdnsHostnames.map(d => ({
timestamp,
agent_uuid: agentUuid,
site_uuid: SITE_UUID,
mdns_hostname: d.mdns_hostname,
download: d.download || 0,
upload: d.upload || 0,
flows: d.flows || 0,
}));
await MdnsHostnameStat.insertMany(docs);
console.log(`[Collector] ✓ ${docs.length} mDNS hostnames saved for ${label}`);
}
} catch (err) {
console.error(`[CollectorHelperDpi] Error saving DPI property telemetry:`, err.message);
}
}
module.exports = {
collectDpiPropertyTelemetry,
};