87 lines
2.4 KiB
JavaScript
87 lines
2.4 KiB
JavaScript
const net = require('net');
|
|
const os = require('os');
|
|
|
|
// Function to check if a port is open on a given IP
|
|
async function checkPort(ip, port, timeout = 1000) {
|
|
return new Promise((resolve) => {
|
|
const socket = new net.Socket();
|
|
let status = 'closed';
|
|
|
|
socket.setTimeout(timeout);
|
|
socket.on('connect', () => {
|
|
status = 'open';
|
|
socket.destroy();
|
|
resolve(status);
|
|
});
|
|
|
|
socket.on('timeout', () => {
|
|
socket.destroy();
|
|
resolve(status);
|
|
});
|
|
|
|
socket.on('error', () => {
|
|
socket.destroy();
|
|
resolve(status);
|
|
});
|
|
|
|
socket.connect(port, ip);
|
|
});
|
|
}
|
|
|
|
// Function to get all local network interfaces
|
|
function getLocalIPRanges() {
|
|
const interfaces = os.networkInterfaces();
|
|
const ranges = [];
|
|
|
|
for (const name of Object.keys(interfaces)) {
|
|
for (const iface of interfaces[name]) {
|
|
// Skip internal and non-IPv4 addresses
|
|
if (iface.internal || iface.family !== 'IPv4') continue;
|
|
|
|
// Get network range (simple /24 assumption)
|
|
const ipParts = iface.address.split('.').slice(0, 3);
|
|
ranges.push(ipParts.join('.') + '.0/24');
|
|
}
|
|
}
|
|
|
|
return ranges;
|
|
}
|
|
|
|
// Function to generate all IPs in a range
|
|
function* generateIPsFromRange(ipRange) {
|
|
const [base, mask] = ipRange.split('/');
|
|
const baseParts = base.split('.').map(Number);
|
|
|
|
// Simple handling for /24 ranges
|
|
if (mask === '24') {
|
|
for (let i = 1; i <= 254; i++) {
|
|
yield `${baseParts[0]}.${baseParts[1]}.${baseParts[2]}.${i}`;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Main scanning function
|
|
async function scanNetwork() {
|
|
const ipRanges = getLocalIPRanges();
|
|
const portsToCheck = [8080, 8005];
|
|
const portNamesToCheck = {"8080": "CORE", "8005": "CENTRAL"};
|
|
|
|
console.log(`Starting scan of local network ranges: ${ipRanges.join(', ')}`);
|
|
console.log(`Checking ports: ${portsToCheck.join(', ')}`);
|
|
|
|
for (const range of ipRanges) {
|
|
console.log(`\nScanning range: ${range}`);
|
|
|
|
for (const ip of generateIPsFromRange(range)) {
|
|
for (const port of portsToCheck) {
|
|
checkPort(ip, port).then((status) => {
|
|
if(status === 'open')console.log(`${ip}, Port: ${port} - ${status}`, portNamesToCheck[port]);
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Run the scan
|
|
scanNetwork().catch(console.error);
|