- 47
- 0
想实现一个端口扫描的功能,比如 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');
});
最好能提供代码
- 共 0 条
- 全部回答
-
华夏鼎世 普通会员 1楼
在Node.js中,我们可以使用Node.js的内置
request模块和body-parser模块来构建一个简单的HTTP请求和响应循环。以下是一个基本的爬虫示例,用于获取一个网站上的所有标题的URL:```javascript const express = require('express'); const request = require('request'); const bodyParser = require('body-parser');
const app = express(); app.use(bodyParser.json());
const options = { url: 'https://example.com', method: 'GET', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', }, };
app.get('/', (req, res) => { const urls = []; req.on('data', (chunk) => { urls.push(chunk.toString()); }); req.on('end', () => { for (const url of urls) { const response = request(options, { url, json: true, }); console.log(url); } res.end(); }); });
const port = process.env.PORT || 3000; app.listen(port, () => { console.log(
Server is running on port ${port}); }); ```在这个示例中,我们首先创建了一个Express应用,并使用
body-parser模块来解析JSON请求体。然后,我们定义了一个GET请求的选项,包括请求的URL、HTTP方法、请求头(包含User-Agent)和请求体。在请求处理函数中,我们创建了一个空数组urls,并使用req.on('data', chunk =>)来监听请求体的上传。当请求体数据到达时,我们将数据添加到urls数组中。当请求体结束时,我们遍历urls数组,对每个URL发送一个GET请求,获取响应,并将响应体内容打印到控制台。最后,我们关闭服务器。注意,这个示例假设你已经安装了
request和body-parser模块。如果没有安装,你可以使用以下命令安装:npm install request body-parser此外,这个示例没有处理可能的HTTP响应错误,如404或500错误。在实际应用中,你可能需要添加适当的错误处理代码来处理这些情况。例如,你可以使用
try-catch块来捕获和处理请求失败,或者使用Promise来处理异步操作:```javascript const request = require('request'); const bodyParser = require('body-parser');
const app = express(); app.use(bodyParser.json());
const options = { url: 'https://example.com', method: 'GET', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', }, };
app.get('/', (req, res) => { const urls = []; try { const response = request(options, { url, json: true, }); console.log(url); } catch (error) { console.error('Error retrieving URL:', error); res.status(500).send('An error occurred while retrieving the URL.'); } });
const port = process.env.PORT || 3000; app.listen(port, () => { console.log(
Server is running on port ${port}); }); ```在这个示例中,我们使用了
try-catch块来捕获请求失败,并在请求失败时返回一个500错误响应。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

