const net = require("net");
/**
* فحص منفذ معين على عنوان IP أو موقع
* @param {string} host - عنوان الموقع أو IP
* @param {number} port - رقم المنفذ المطلوب فحصه
* @returns {Promise<boolean>} - إرجاع true إذا كان المنفذ مفتوحًا، وإلا false
*/
function checkPort(host, port) {
return new Promise((resolve) => {
const socket = new net.Socket();
socket.setTimeout(2000); // تعيين مهلة الاتصال 2 ثانية
socket.on("connect", () => {
console.log(`✅ المنفذ ${port} مفتوح على ${host}`);
socket.destroy();
resolve(true);
});
socket.on("timeout", () => {
console.log(`❌ المنفذ ${port} مغلق على ${host} (Timeout)`);
socket.destroy();
resolve(false);
});
socket.on("error", () => {
console.log(`❌ المنفذ ${port} مغلق على ${host}`);
resolve(false);
});
socket.connect(port, host);
});
}
/**
* فحص عدة منافذ على موقع معين
* @param {string} host - عنوان الموقع أو IP
* @param {number[]} ports - قائمة المنافذ المطلوب فحصها
*/
async function scanPorts(host, ports) {
console.log(`🔍 بدء فحص ${host} على المنافذ: ${ports.join(", ")}`);
for (const port of ports) {
await checkPort(host, port);
}
}
// تشغيل التطبيق على موقع معين
const targetHost = "example.com"; // قم بتغيير هذا إلى الموقع المطلوب
const portsToCheck = [21, 22, 23, 25, 53, 80, 443, 8080]; // قائمة المنافذ الشائعة
scanPorts(targetHost, portsToCheck);
Y29uc3QgbmV0ID0gcmVxdWlyZSgibmV0Iik7CgovKioKICog2YHYrdi1INmF2YbZgdiwINmF2LnZitmGINi52YTZiSDYudmG2YjYp9mGIElQINij2Ygg2YXZiNmC2LkKICogQHBhcmFtIHtzdHJpbmd9IGhvc3QgLSDYudmG2YjYp9mGINin2YTZhdmI2YLYuSDYo9mIIElQCiAqIEBwYXJhbSB7bnVtYmVyfSBwb3J0IC0g2LHZgtmFINin2YTZhdmG2YHYsCDYp9mE2YXYt9mE2YjYqCDZgdit2LXZhwogKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSDYpdix2KzYp9i5IHRydWUg2KXYsNinINmD2KfZhiDYp9mE2YXZhtmB2LAg2YXZgdiq2YjYrdmL2KfYjCDZiNil2YTYpyBmYWxzZQogKi8KZnVuY3Rpb24gY2hlY2tQb3J0KGhvc3QsIHBvcnQpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgIGNvbnN0IHNvY2tldCA9IG5ldyBuZXQuU29ja2V0KCk7CiAgICAgICAgc29ja2V0LnNldFRpbWVvdXQoMjAwMCk7IC8vINiq2LnZitmK2YYg2YXZh9mE2Kkg2KfZhNin2KrYtdin2YQgMiDYq9in2YbZitipCgogICAgICAgIHNvY2tldC5vbigiY29ubmVjdCIsICgpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coYOKchSDYp9mE2YXZhtmB2LAgJHtwb3J0fSDZhdmB2KrZiNitINi52YTZiSAke2hvc3R9YCk7CiAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7CiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7CiAgICAgICAgfSk7CgogICAgICAgIHNvY2tldC5vbigidGltZW91dCIsICgpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coYOKdjCDYp9mE2YXZhtmB2LAgJHtwb3J0fSDZhdi62YTZgiDYudmE2YkgJHtob3N0fSAoVGltZW91dClgKTsKICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfSk7CgogICAgICAgIHNvY2tldC5vbigiZXJyb3IiLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGDinYwg2KfZhNmF2YbZgdiwICR7cG9ydH0g2YXYutmE2YIg2LnZhNmJICR7aG9zdH1gKTsKICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfSk7CgogICAgICAgIHNvY2tldC5jb25uZWN0KHBvcnQsIGhvc3QpOwogICAgfSk7Cn0KCi8qKgogKiDZgdit2LUg2LnYr9ipINmF2YbYp9mB2LAg2LnZhNmJINmF2YjZgti5INmF2LnZitmGCiAqIEBwYXJhbSB7c3RyaW5nfSBob3N0IC0g2LnZhtmI2KfZhiDYp9mE2YXZiNmC2Lkg2KPZiCBJUAogKiBAcGFyYW0ge251bWJlcltdfSBwb3J0cyAtINmC2KfYptmF2Kkg2KfZhNmF2YbYp9mB2LAg2KfZhNmF2LfZhNmI2Kgg2YHYrdi12YfYpwogKi8KYXN5bmMgZnVuY3Rpb24gc2NhblBvcnRzKGhvc3QsIHBvcnRzKSB7CiAgICBjb25zb2xlLmxvZyhg8J+UjSDYqNiv2KEg2YHYrdi1ICR7aG9zdH0g2LnZhNmJINin2YTZhdmG2KfZgdiwOiAke3BvcnRzLmpvaW4oIiwgIil9YCk7CiAgICBmb3IgKGNvbnN0IHBvcnQgb2YgcG9ydHMpIHsKICAgICAgICBhd2FpdCBjaGVja1BvcnQoaG9zdCwgcG9ydCk7CiAgICB9Cn0KCi8vINiq2LTYutmK2YQg2KfZhNiq2LfYqNmK2YIg2LnZhNmJINmF2YjZgti5INmF2LnZitmGCmNvbnN0IHRhcmdldEhvc3QgPSAiZXhhbXBsZS5jb20iOyAvLyDZgtmFINio2KrYutmK2YrYsSDZh9iw2Kcg2KXZhNmJINin2YTZhdmI2YLYuSDYp9mE2YXYt9mE2YjYqApjb25zdCBwb3J0c1RvQ2hlY2sgPSBbMjEsIDIyLCAyMywgMjUsIDUzLCA4MCwgNDQzLCA4MDgwXTsgLy8g2YLYp9im2YXYqSDYp9mE2YXZhtin2YHYsCDYp9mE2LTYp9im2LnYqQoKc2NhblBvcnRzKHRhcmdldEhvc3QsIHBvcnRzVG9DaGVjayk7
🔍 بدء فحص example.com على المنافذ: 21, 22, 23, 25, 53, 80, 443, 8080
❌ المنفذ 21 مغلق على example.com
❌ المنفذ 22 مغلق على example.com
❌ المنفذ 23 مغلق على example.com
❌ المنفذ 25 مغلق على example.com
❌ المنفذ 53 مغلق على example.com
❌ المنفذ 80 مغلق على example.com
❌ المنفذ 443 مغلق على example.com
❌ المنفذ 8080 مغلق على example.com