340 lines
13 KiB
HTML
340 lines
13 KiB
HTML
</DIV>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="x-dns-prefetch-control" content="on">
|
||
<link rel="dns-prefetch" href="//cdn.jsdelivr.net">
|
||
<link rel="dns-prefetch" href="//whois.pconline.com.cn">
|
||
<link rel="dns-prefetch" href="//ipv4.ip.sb">
|
||
<link rel="dns-prefetch" href="//myip.ipip.net">
|
||
<link rel="dns-prefetch" href="//api.ipify.org">
|
||
<link rel="dns-prefetch" href="//api.ttt.sh">
|
||
<link rel="dns-prefetch" href="//api.skk.moe">
|
||
<link rel="dns-prefetch" href="//d.skk.moe">
|
||
<link rel="preconnect" href="https://whois.pconline.com.cn">
|
||
<link rel="preconnect" href="https://ip.sb">
|
||
<link rel="preconnect" href="https://myip.ipip.net">
|
||
<link rel="preconnect" href="https://api.ipify.org">
|
||
<link rel="preconnect" href="https://api.ttt.sh">
|
||
<link rel="preconnect" href="https://api.skk.moe">
|
||
<link rel="preconnect" href="https://d.skk.moe">
|
||
<link rel="shortcut icon" type="image/ico" href="https://cdn.jsdelivr.net/npm/skx@0.0.1">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,minimal-ui">
|
||
<style>
|
||
.ip-title {
|
||
font-weight: bold;
|
||
color: #444;
|
||
font-size:15px;
|
||
display: inline-block;
|
||
width: 25%;
|
||
vertical-align:bottom;
|
||
}
|
||
|
||
.ip-state_title {
|
||
font-weight: bold;
|
||
color: #444;
|
||
font-size:15px;
|
||
display: inline-block;
|
||
width: 52%;
|
||
vertical-align:bottom;
|
||
transform:translateY(10%);
|
||
}
|
||
|
||
.ip-result {
|
||
color: #444;
|
||
font-size:16px;
|
||
white-space: nowrap; /*强制span不换行*/
|
||
display: inline-block; /*将span当做块级元素对待*/
|
||
width: 29%; /*限制宽度*/
|
||
overflow: hidden; /*超出宽度部分隐藏*/
|
||
text-overflow: ellipsis; /*超出部分以点号代替*/
|
||
vertical-align:bottom;
|
||
transform:translateY(8%);
|
||
}
|
||
|
||
.ip-geo {
|
||
color: #444;
|
||
font-size:15px;
|
||
white-space: nowrap; /*强制span不换行*/
|
||
display: inline-block; /*将span当做块级元素对待*/
|
||
width: 40%; /*限制宽度*/
|
||
overflow: hidden; /*超出宽度部分隐藏*/
|
||
text-overflow: ellipsis; /*超出部分以点号代替*/
|
||
vertical-align:bottom;
|
||
transform:translateY(2%);
|
||
}
|
||
|
||
.ip-checking {
|
||
color: #444;
|
||
font-size:15px;
|
||
display: inline-block;
|
||
vertical-align:bottom;
|
||
width: 29%;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
transform:translateY(10%);
|
||
}
|
||
|
||
.sk-text-success {
|
||
color: #32b643;
|
||
font-size:15px;
|
||
display: inline-block;
|
||
vertical-align:bottom;
|
||
width: 48%;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
text-align: left;
|
||
transform:translateY(10%);
|
||
}
|
||
|
||
.sk-text-error {
|
||
color: #e85600;
|
||
font-size:15px;
|
||
display: inline-block;
|
||
vertical-align:bottom;
|
||
width: 48%;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
text-align: left;
|
||
transform:translateY(10%);
|
||
}
|
||
|
||
h3 {
|
||
margin: 5px 0 6px;
|
||
}
|
||
|
||
p {
|
||
margin: 10px 0;
|
||
}
|
||
|
||
a {
|
||
text-decoration: none;
|
||
color: #666;
|
||
}
|
||
|
||
</style>
|
||
</head>
|
||
<fieldset class="cbi-section">
|
||
|
||
<table>
|
||
<tr><td width="100%">
|
||
<body>
|
||
<div style="display: flex;">
|
||
<div style="width: 51%">
|
||
<h1><font color="#2E8B57"><B>IP 地址查询</B></font></h1>
|
||
<p>
|
||
<span class="ip-title">IP 登录设备:</span><span class="ip-result" id="ip-webrtc"></span> <span class="ip-geo" id="ip-webrtc-cz88"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-title">IPIP 国内:</span><span class="ip-result" id="ip-ipipnet"></span> <span class="ip-geo" id="ip-ipipnet-geo"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-title">太平洋 国内:</span><span class="ip-result" id="ip-pcol"></span> <span class="ip-geo" id="ip-pcol-ipip"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-title">IP.SB 海外:</span><span class="ip-result" id="ip-ipsb"></span> <span class="ip-geo" id="ip-ipsb-geo"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-title">IPIFY 海外:</span><span class="ip-result" id="ip-ipify"></span> <span class="ip-geo" id="ip-ipify-ipip"></span>
|
||
</p>
|
||
</div>
|
||
<div style="width: 49%">
|
||
<h1><font color="#2E8B57"><B>网站访问检查</B></font></h1>
|
||
<p>
|
||
<span class="ip-state_title">百度搜索:</span><span id="http-baidu"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-state_title">网易云音乐:</span><span id="http-163"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-state_title">GitHub:</span><span id="http-github"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-state_title">Facebook:</span><span id="http-facebook"></span>
|
||
</p>
|
||
<p>
|
||
<span class="ip-state_title">YouTube:</span><span id="http-youtube"></span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<p style="float: right; margin-top: 4px; font-size:15px; padding-right: 10px">由 <a onclick="return ip_skk()" href="javascript:void(0);">ip.skk.moe 提供支持</a></p>
|
||
</div>
|
||
</td></tr>
|
||
</table>
|
||
</fieldset>
|
||
<script>
|
||
function ip_skk()
|
||
{
|
||
url2='https://ip.skk.moe';
|
||
window.open(url2);
|
||
}
|
||
const $$ = document;
|
||
$$.getElementById('ip-webrtc').innerHTML = '查询中...';
|
||
$$.getElementById('ip-pcol').innerHTML = '查询中...';
|
||
$$.getElementById('ip-ipify').innerHTML = '查询中...';
|
||
$$.getElementById('ip-ipipnet').innerHTML = '查询中...';
|
||
$$.getElementById('ip-ipsb').innerHTML = '查询中...';
|
||
let random = parseInt(Math.random() * 100000000);
|
||
let IP = {
|
||
get: (url, type) =>
|
||
fetch(url, { method: 'GET' }).then((resp) => {
|
||
if (type === 'text')
|
||
return Promise.all([resp.ok, resp.status, resp.text(), resp.headers]);
|
||
else {
|
||
return Promise.all([resp.ok, resp.status, resp.json(), resp.headers]);
|
||
}
|
||
}).then(([ok, status, data, headers]) => {
|
||
if (ok) {
|
||
let json = {
|
||
ok,
|
||
status,
|
||
data,
|
||
headers
|
||
}
|
||
return json;
|
||
} else {
|
||
throw new Error(JSON.stringify(json.error));
|
||
}
|
||
}).catch(error => {
|
||
throw error;
|
||
}),
|
||
parseIPIpip: (ip, elID) => {
|
||
IP.get(`https://api.skk.moe/network/parseIp/ipip/${ip}`, 'json')
|
||
.then(resp => {
|
||
let x = '';
|
||
for (let i of resp.data) {
|
||
x += (i !== '') ? `${i} ` : '';
|
||
}
|
||
$$.getElementById(elID).innerHTML = x;
|
||
//$$.getElementById(elID).innerHTML = `${resp.data.country} ${resp.data.regionName} ${resp.data.city} ${resp.data.isp}`;
|
||
})
|
||
},
|
||
getWebrtcIP: () => {
|
||
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
|
||
let pc = new RTCPeerConnection({ iceServers: [] }),
|
||
noop = () => { };
|
||
|
||
pc.createDataChannel('');
|
||
pc.createOffer(pc.setLocalDescription.bind(pc), noop);
|
||
pc.onicecandidate = (ice) => {
|
||
if (!ice || !ice.candidate || !ice.candidate.candidate) {
|
||
$$.getElementById('ip-webrtc').innerHTML = '没有查询到 IP';
|
||
return;
|
||
}
|
||
let ip = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
|
||
$$.getElementById('ip-webrtc').innerHTML = ip;
|
||
IP.parseIPIpip(ip, 'ip-webrtc-cz88');
|
||
pc.onicecandidate = noop;
|
||
};
|
||
},
|
||
getIpipnetIP: () => {
|
||
IP.get(`https://myip.ipip.net/?z=${random}`, 'text')
|
||
.then((resp) => {
|
||
let data = resp.data.replace('当前 IP:', '').split(' 来自于:');
|
||
$$.getElementById('ip-ipipnet').innerHTML = `${data[0]}`;
|
||
$$.getElementById('ip-ipipnet-geo').innerHTML = `${data[1]}`;
|
||
});
|
||
},
|
||
getIPApiIP: () => {
|
||
IP.get(`https://ipapi.co/json?z=${random}`, 'json')
|
||
.then(resp => {
|
||
$$.getElementById('ip-ipapi').innerHTML = resp.data.ip;
|
||
IP.parseIPIpip(resp.data.ip, 'ip-ipapi-geo');
|
||
})
|
||
},
|
||
getIpifyIP: () => {
|
||
IP.get(`https://api.ipify.org/?format=json&z=${random}`, 'json')
|
||
.then(resp => {
|
||
$$.getElementById('ip-ipify').innerHTML = resp.data.ip;
|
||
return resp.data.ip;
|
||
})
|
||
.then(ip => {
|
||
IP.parseIPIpip(ip, 'ip-ipify-ipip');
|
||
})
|
||
}
|
||
};
|
||
|
||
$$.getElementById('http-baidu').innerHTML = '<span class="ip-checking">检测中...</span>';
|
||
$$.getElementById('http-163').innerHTML = '<span class="ip-checking">检测中...</span>';
|
||
$$.getElementById('http-github').innerHTML = '<span class="ip-checking">检测中...</span>';
|
||
$$.getElementById('http-facebook').innerHTML = '<span class="ip-checking">检测中...</span>';
|
||
$$.getElementById('http-youtube').innerHTML = '<span class="ip-checking">检测中...</span>';
|
||
let HTTP = {
|
||
checker: (domain, cbElID) => {
|
||
let img = new Image;
|
||
let timeout = setTimeout(() => {
|
||
img.onerror = img.onload = null;
|
||
$$.getElementById(cbElID).innerHTML = '<span class="sk-text-error">连接超时</span>'
|
||
}, 5000);
|
||
|
||
img.onerror = () => {
|
||
clearTimeout(timeout);
|
||
$$.getElementById(cbElID).innerHTML = '<span class="sk-text-error">无法访问</span>'
|
||
}
|
||
|
||
img.onload = () => {
|
||
clearTimeout(timeout);
|
||
$$.getElementById(cbElID).innerHTML = '<span class="sk-text-success">连接正常</span>'
|
||
}
|
||
|
||
img.src = `https://${domain}/favicon.ico?${+(new Date)}`
|
||
},
|
||
runcheck: () => {
|
||
HTTP.checker('www.baidu.com', 'http-baidu');
|
||
HTTP.checker('s1.music.126.net/style', 'http-163');
|
||
HTTP.checker('github.com', 'http-github');
|
||
HTTP.checker('www.facebook.com', 'http-facebook');
|
||
HTTP.checker('www.youtube.com', 'http-youtube');
|
||
}
|
||
};
|
||
|
||
HTTP.runcheck();
|
||
IP.getIpipnetIP();
|
||
IP.getIpifyIP();
|
||
IP.getWebrtcIP();
|
||
|
||
function getPcolIP(data){
|
||
$$.getElementById('ip-pcol').innerHTML = data.ip;
|
||
IP.parseIPIpip(data.ip, 'ip-pcol-ipip');
|
||
};
|
||
function getIpsbIP(data){
|
||
$$.getElementById('ip-ipsb').innerHTML = data.address;
|
||
$$.getElementById('ip-ipsb-geo').innerHTML = `${data.country} ${data.province} ${data.city} ${data.isp.name}`
|
||
};
|
||
|
||
window.onload=myip_Load();
|
||
|
||
function myip_Load()
|
||
{
|
||
var pcip = document.getElementsByTagName('HEAD').item(0);
|
||
var pcipScript= document.createElement("script");
|
||
pcipScript.defer = "defer";
|
||
pcipScript.src='https://whois.pconline.com.cn/ipJson.jsp?callback=getPcolIP';
|
||
pcip.appendChild(pcipScript);
|
||
|
||
var sbip = document.getElementsByTagName('HEAD').item(0);
|
||
var sbipScript= document.createElement("script");
|
||
sbipScript.defer = "defer";
|
||
sbipScript.src='https://ip.sb/addrinfo?callback=getIpsbIP';
|
||
sbip.appendChild(sbipScript);
|
||
|
||
const $$ = document;
|
||
random = parseInt(Math.random() * 100000000);
|
||
HTTP.runcheck();
|
||
IP.getIpipnetIP();
|
||
IP.getIpifyIP();
|
||
IP.getWebrtcIP();
|
||
|
||
setTimeout("myip_Load()",1000*20);
|
||
}
|
||
|
||
</script>
|
||
<script defer="defer" src="https://whois.pconline.com.cn/ipJson.jsp?callback=getPcolIP"></script>
|
||
<script defer="defer" src="https://ip.sb/addrinfo?callback=getIpsbIP"></script>
|
||
</body>
|
||
|
||
</html>
|