Шаблоны сайтов Landing Page
1 500 р.
2 000 р.
// Table NetObject
const NetObject = sequelize.define(«netObject», {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
IP: {
type: DataTypes.STRING,
unique: true
}
});
// Table Port
const Port = sequelize.define(«port», {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
number: {
type: DataTypes.INTEGER
},
description: {
type: DataTypes.STRING,
}
}, {timestamps: false});
// Table Scan
const Scan = sequelize.define(«scan», {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
date: {
type: DataTypes.DATE
}
}, {timestamps: false});
const ScanNetObject = sequelize.define(«ScanNetObject»,{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
},
}, {timestamps: false});
ScanNetObjectPort.belongsTo(Scan);
ScanNetObjectPort.belongsTo(NetObject);
ScanNetObjectPort.belongsTo(Port);
Scan.hasMany(ScanNetObjectPort);
NetObject.hasMany(ScanNetObjectPort);
Port.hasMany(ScanNetObjectPort);
[
{
«hostname»:«localhost»,
«ip»:«127.0.0.1»,
«mac»:null,
«openPorts»:[
{«port»:22,«protocol»:«tcp»,«service»:«ssh»,«method»:«table»}
],
«osNmap»:null
}
]
exports.scan_art = (IPaddr) => {
const nmap_scan = new nmap.NmapScan(IPaddr.toString());
console.log(«Starting nmap scan...»);
nmap_scan.on('complete', function(data){
let sca = {«date»: Date.now()};
// Циклом проходим результаты скана (там может быть более 1 адреса), создаем Scan, NetObject (если его нет), ScanNetObjectPort
Scan.create(sca)
.then ((newScan) => {
NetObject.findOrCreate({where:{IP: IPaddr}, defaults: {IP: IPaddr}})
.then((newNetObject) => {
for (let var_host in data){
for (let var_port in data[var_host].openPorts){
let str_port = data[var_host].openPorts[var_port].port.toString();
let str_desc = data[var_host].openPorts[var_port].service.toString();
Port.create({«number»: str_port, «description»: str_desc})
.then((newPort)=>{
const nSNOP = {
«portId»: newPort.id,
«netObjectId»: newNetObject[0].id,
«scanId»: newScan.id
};
ScanNetObjectPort.create(nSNOP)
.then(() => {
console.log(«Port «+str_port+» for host «+IPaddr+» is added to database»);
})
.catch ((error)=> {console.log(«Error on create: newScanNetObjectPort: \n»+error.message)});
})
}
}
})
.catch ((error)=> {console.log(«Error on create: newNetObject: \n»+error.message)});
})
.catch ((error)=> {console.log(«Error on create: newScan: \n»+error.message)});
});
nmap_scan.on('error', function(error){
console.log(error);
});
nmap_scan.startScan();
};
exports.get_list = async()=>{
let NetObject_list = await NetObject.findAll();
let list = [];
await NetObject_list.forEach((NO)=> {
list.push(NO.IP.toString());
});
return list;
};
async function array_scan () {
nmap.get_list().then((scan_list)=>{
scan_list.forEach((scanListKey) =>{
nmap.scan_art(scanListKey.toString());
});
})
}
setInterval(array_scan, 360000);
Report for 127.0.0.1
Date: Tue Dec 15 2020 16:53:18 GMT+0300 (Moscow Standard Time)
Port 22 with service ssh
Port 5432 with service postgresql
Port 8080 with service http-proxy
Date: Tue Dec 15 2020 18:25:50 GMT+0300 (Moscow Standard Time)
Port 22 with service ssh
Port 5432 with service postgresql
Port 8080 with service http-proxy
exports.test_report = (IPaddr) => {
let text_report = «»;
if (IPaddr === undefined) {console.log(«IPaddr is undefined..!»); return;}
let report_promise = new Promise(function (resolve, reject) {
NetObject.findOne({where: {«IP»: IPaddr}}).then(function (NOp) {
if (NOp === null) {console.log(«Not found NetObject by IP «+ IPaddr); return;}
text_report += «Report for « + NOp.IP.toString() + «\n»;
ScanNetObjectPort.findAll({where:{«netObjectId»: NOp.id}, include: [{model: Scan}, {model: Port}]})
.then(async function (sel) {
let scan_id = sel[0].scanId; // запоминаем id первого найденного скана как текущий
let scan_date = null;
await Scan.findByPk(scan_id).then(function (scan1) {
scan_date = scan1.date;
});
text_report += «Date: «+ scan_date.toString() +»\n»;
for (const item of sel) {
if (item.scanId !== scan_id) { // проверяем, текущий ли скан
scan_id = item.scanId;
await Scan.findByPk(scan_id).then(function (scan1) {
scan_date = scan1.date;
text_report += «Date: «+ scan_date.toString() +»\n»;
});
}
await Port.findByPk(item.portId).then (function (p) {
text_report += «Port «+ p.number + « with service « + p.description +»\n»;
});
}
return sel;
})
.then (() => { resolve(text_report);})
.catch((error) =>{console.log(«Error on: ScanNetObjectPort.findAll» + error.message); reject(error);});
});
});
exports.run = async ()=> {
bot.command('report', (ctx) => {
const netObjectName = ctx.message.text.split(» «)[1];
if (netObjectName === undefined) {return;}
let promise = new Promise(async function (resolve, reject) {
let var_report = await report.get_test_report(netObjectName.toString());
resolve(var_report);
});
promise.then(function (result) {
ctx.reply(result.toString())
.then(()=>{console.log(«report generating successful!»)})
.catch((error)=>{console.log(«Error on report promise» + error)});
},
function (error) {
ctx.reply(«error on generating report...» + error).then(()=>{console.log(«error on generating report...» + error)});
});
});
bot.launch().then (function () {
console.log(«telegram bot is started»);
})
};