|
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}`); |
|
}); |