| import express from "express"; | |
| import bodyParser from "body-parser"; | |
| const app = express(); | |
| const port = 7860; | |
| app.use(bodyParser.json()); | |
| const isipok = async (ip) => { | |
| const ret = await fetch("https://copilot.microsoft.com/", { | |
| headers: { | |
| "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", | |
| "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", | |
| "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0", | |
| "X-forwarded-for": ip | |
| } | |
| }); | |
| if (!ret.ok) { | |
| return { ip, status: false }; | |
| } | |
| const txt = await ret.text(); | |
| if (txt.indexOf("studiostaticassetsprod.azureedge.net/bundle-cmc/assets/bundle.js") >= 0) { | |
| return { ip, status: false, reason: "nononononon" }; | |
| } | |
| if (txt.indexOf('<div class="title" role="heading" aria-level="1">登录以体验 Microsoft Copilot</div>') >= 0) { | |
| return { ip, status: false, reason: "ddddddddddd" }; | |
| } | |
| const rt = /Region:"(.*?)"/.exec(txt); | |
| if (!rt) { | |
| return { ip, status: false }; | |
| } | |
| const rg = rt[1]; | |
| if (!rg) { | |
| return { ip, status: false }; | |
| } | |
| return { ip, status: true, region: rg }; | |
| } | |
| const testAll = async (startIP, endIP) => { | |
| const results = []; | |
| const [startI, startI0, startI1, startI2] = startIP.split('.').map(Number); | |
| const [endI, endI0, endI1, endI2] = endIP.split('.').map(Number); | |
| let i = startI, i0 = startI0, i1 = startI1, i2 = startI2; | |
| const testNext = async () => { | |
| i2++; | |
| if (i2 > 255) { | |
| i2 = 0; | |
| i1++; | |
| } | |
| if (i1 > 255) { | |
| i1 = 0; | |
| i0++; | |
| } | |
| if (i0 > 255) { | |
| i0 = 0; | |
| i++; | |
| } | |
| if (i > endI || (i === endI && i0 > endI0) || (i === endI && i0 === endI0 && i1 > endI1) || (i === endI && i0 === endI0 && i1 === endI1 && i2 > endI2)) { | |
| return false; | |
| } | |
| const XForwardedForIP = `${i}.${i0}.${i1}.${i2}`; | |
| try { | |
| const result = await isipok(XForwardedForIP); | |
| results.push(result); | |
| } catch (error) { | |
| console.error(error); | |
| } | |
| return true; | |
| } | |
| let count = 0; | |
| let stop = false; | |
| while (true) { | |
| while (count >= 16) { | |
| await new Promise((t) => { setTimeout(t, 100) }); | |
| } | |
| count++; | |
| testNext().then((rt) => { | |
| count--; | |
| if (!rt) { | |
| stop = true; | |
| } | |
| }); | |
| if (stop) { | |
| break; | |
| } | |
| } | |
| return results; | |
| } | |
| app.post("/test", async (req, res) => { | |
| const { startIP, endIP } = req.body; | |
| const results = await testAll(startIP, endIP); | |
| res.json(results); | |
| }); | |
| app.get("/", (req, res) => { | |
| res.send(` | |
| <!DOCTYPE html> | |
| <html lang="zh-CN"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>IP Range Checker</title> | |
| </head> | |
| <body> | |
| <h1>IP Range Checker</h1> | |
| <form id="ipForm"> | |
| <label for="startIP">开始地址:</label> | |
| <input type="text" id="startIP" name="startIP" required> | |
| <br> | |
| <label for="endIP">结束地址:</label> | |
| <input type="text" id="endIP" name="endIP" required> | |
| <br> | |
| <button type="submit">检查</button> | |
| </form> | |
| <h2>结果:</h2> | |
| <textarea id="results" rows="10" cols="50"></textarea> | |
| <br> | |
| <button id="copyButton">复制</button> | |
| <script> | |
| document.getElementById('ipForm').addEventListener('submit', async (event) => { | |
| event.preventDefault(); | |
| const startIP = document.getElementById('startIP').value; | |
| const endIP = document.getElementById('endIP').value; | |
| const response = await fetch('/test', { | |
| method: 'POST', | |
| headers: { | |
| 'Content-Type': 'application/json' | |
| }, | |
| body: JSON.stringify({ startIP, endIP }) | |
| }); | |
| const results = await response.json(); | |
| document.getElementById('results').value = JSON.stringify(results, null, 2); | |
| }); | |
| document.getElementById('copyButton').addEventListener('click', () => { | |
| const results = document.getElementById('results'); | |
| results.select(); | |
| document.execCommand('copy'); | |
| }); | |
| </script> | |
| </body> | |
| </html> | |
| `); | |
| }); | |
| app.listen(port, () => { | |
| console.log(`Server is running at http://localhost:${port}`); | |
| }); |