想实现一个端口扫描的功能,比如 192.168.1.666:80
-192.168.1.666:10000
使用的是 nodejs + express + cheerio
个人思路:循环端口,使用superagent
抓取80-10000之间ip的端口,如果该端口没有则跳出本次循环,然后执行下次,声明data
变量,如果端口内有内容且抓网站title,push
到data
中,
最后当执行到最大接口时,res.send(data)
遇到的问题:一直在转圈圈,把循环调小也一样,不知道什么问题,需要异步还是代码有问题?
代码:
const express = require('express');
var cheerio = require('cheerio');
const superagent = require('superagent');
const app = express();
//爬取地址
var url = 'http://47.74.xxx.xxx';
var maxport = 8085;
var data = [];
for(let port = 8082; port < maxport ; port++){
app.get('/', function (req, res, next) {
superagent.get( url + ':' + port )
.end(function (err, sres) {
if (err) {
return next(err);
}
const $ = cheerio.load(sres.text);
let items = $('title').text();
data.push(items)
if(port >= maxport){
res.send(data);
}
})
});
}
app.listen(3000, function () {
console.log('app is listening at port 3000');
});
最好能提供代码
你的问题可以归结为在nodejs中,for循环里面如何异步处理