try again mac-lookup

This commit is contained in:
2025-09-23 19:54:27 +02:00
parent f21da6b888
commit dfdfbbdf68
7 changed files with 228 additions and 6 deletions

View File

@@ -21,4 +21,4 @@
"pino-pretty": "^13.0.0",
"whois-json": "^2.0.4"
}
}
}

View File

@@ -0,0 +1,39 @@
// backend/routes/macLookup.js
const express = require('express');
const Sentry = require("@sentry/node");
const macaddress = require('macaddress');
const pino = require('pino');
const { isValidMacAddress } = require('../utils'); // Wir fügen diese neue Funktion hinzu
const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
const router = express.Router();
router.get('/', async (req, res) => {
const macRaw = req.query.mac;
const mac = typeof macRaw === 'string' ? macRaw.trim() : macRaw;
const requestIp = req.ip || req.socket.remoteAddress;
logger.info({ requestIp, mac }, 'MAC lookup request received');
if (!isValidMacAddress(mac)) {
logger.warn({ requestIp, mac }, 'Invalid MAC address for lookup');
return res.status(400).json({ success: false, error: 'Invalid MAC address format provided.' });
}
try {
const vendor = await macaddress.lookup(mac);
if (vendor) {
logger.info({ requestIp, mac, vendor }, 'MAC lookup successful');
res.json({ success: true, mac, vendor });
} else {
logger.info({ requestIp, mac }, 'MAC address not found in OUI database');
res.status(404).json({ success: false, error: 'Vendor not found for this MAC address.' });
}
} catch (error) {
logger.error({ requestIp, mac, error: error.message }, 'MAC lookup failed');
Sentry.captureException(error, { extra: { requestIp, mac } });
res.status(500).json({ success: false, error: 'An unexpected error occurred during the MAC lookup.' });
}
});
module.exports = router;

View File

@@ -1,6 +1,3 @@
// backend/server.js
// server.js
// Load .env variables FIRST!
require('dotenv').config();
// --- Sentry Initialisierung (GANZ OBEN, nach dotenv) ---
@@ -35,6 +32,7 @@ const dnsLookupRoutes = require('./routes/dnsLookup');
const whoisLookupRoutes = require('./routes/whoisLookup');
const versionRoutes = require('./routes/version');
const portScanRoutes = require('./routes/portScan');
const macLookupRoutes = require('./routes/macLookup');
// --- Logger Initialisierung ---
const logger = pino({
@@ -97,6 +95,7 @@ app.use('/api/lookup', generalLimiter);
app.use('/api/dns-lookup', generalLimiter);
app.use('/api/whois-lookup', generalLimiter);
app.use('/api/port-scan', generalLimiter);
app.use('/api/mac-lookup', generalLimiter);
// --- API Routes ---
@@ -109,6 +108,7 @@ app.use('/api/dns-lookup', dnsLookupRoutes);
app.use('/api/whois-lookup', whoisLookupRoutes);
app.use('/api/version', versionRoutes);
app.use('/api/port-scan', portScanRoutes);
app.use('/api/mac-lookup', macLookupRoutes);
// --- Sentry Error Handler ---

View File

@@ -1,3 +1,4 @@
// backend/utils.js
const net = require('net'); // Node.js built-in module for IP validation
const { spawn } = require('child_process');
const pino = require('pino'); // Import pino for logging within utils if needed
@@ -65,6 +66,20 @@ function isValidDomain(domain) {
return domainRegex.test(domain.trim());
}
/**
* Validiert eine MAC-Adresse.
* @param {string} mac - Die zu validierende MAC-Adresse.
* @returns {boolean} True, wenn das Format gültig ist, sonst false.
*/
function isValidMacAddress(mac) {
if (!mac || typeof mac !== 'string') {
return false;
}
// This regex matches common MAC address formats (e.g., 00:1A:2B:3C:4D:5E, 00-1A-2B-3C-4D-5E, 001A2B3C4D5E)
const macRegex = /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$|^([0-9A-Fa-f]{12})$/;
return macRegex.test(mac.trim());
}
/**
* Bereinigt eine IP-Adresse (z.B. entfernt ::ffff: Präfix von IPv4-mapped IPv6).
@@ -302,6 +317,7 @@ module.exports = {
isValidIp,
isPrivateIp,
isValidDomain,
isValidMacAddress,
getCleanIp,
executeCommand,
parsePingOutput,