immortalwrt/package/ctcgfw/luci-app-ssr-plus-jo/luasrc/view/shadowsocksr/myip.htm
2019-11-24 13:08:28 +08:00

340 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

</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&nbsp;&nbsp;&nbsp;登录设备:</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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;国内:</span><span class="ip-result" id="ip-ipipnet"></span> <span class="ip-geo" id="ip-ipipnet-geo"></span>
</p>
<p>
<span class="ip-title">太平洋&nbsp;&nbsp;国内:</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&nbsp;&nbsp;&nbsp;&nbsp;海外:</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&nbsp;&nbsp;&nbsp;&nbsp;海外:</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>