如何使用for循环配合Promise.all批量请求192.168.1.1-255网段IP
192.168.1.1-255网段批量并发请求实现
你只需要替换原有写死的urls数组,通过for循环遍历1-255的IP尾号拼接完整地址,生成目标请求列表即可,同时建议补充异常处理逻辑,避免单个IP请求失败导致整个批量任务直接中断。
完整实现代码
// 初始化空的URL列表 let urls = []; // 循环生成1-255的IP地址,可根据实际需求替换协议、端口、请求路径 for (let i = 1; i <= 255; i++) { urls.push(`http://192.168.1.${i}`); } // 给每个请求单独加catch,避免单个请求失败触发Promise.all快速失败机制 let requests = urls.map(url => fetch(url) .then(response => ({ success: true, url: response.url, status: response.status })) .catch(err => ({ success: false, url, error: err.message })) ); Promise.all(requests) .then(results => { results.forEach(res => { if (res.success) { console.log(`${res.url}: ${res.status}`); } else { console.log(`${res.url}: 请求失败, ${res.error}`); } }) });
注意事项
- 地址拼接规则:如果目标服务有固定端口、请求路径,直接修改模板字符串即可,例如需要请求80端口的
/check路径,就写成http://192.168.1.${i}/check,如果是HTTPS服务就替换协议头为https:// - 跨域问题:如果在浏览器环境运行代码,目标IP的服务需要配置CORS允许你当前页面的源访问,否则请求会被浏览器安全策略拦截
- 并发压力:一次性发起255个并发请求可能触发浏览器同域名并发连接数限制,也可能对网段内的设备造成冲击,业务允许的话可以增加并发控制逻辑分批发起请求
- 超时处理:原生
fetch默认没有超时机制,可以搭配AbortController实现超时中断,避免无效请求长时间挂起
内容的提问来源于stack exchange,提问作者Mozart
相关产品推荐
相关产品推荐

