显示 TCM 页面中 IP 的 GeoIP 信息
// ==UserScript==
// @name Show GeoIP Info on TCM
// @namespace http://tampermonkey.net/
// @license MIT
// @version 0.2
// @description 显示 TCM 页面中 IP 的 GeoIP 信息
// @author Julydate
// @match trace.speedtest6.club
// @icon https://www.google.com/s2/favicons?domain=speedtest6.club
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 增加显示 IP 信息按钮
var showInfoBtn = document.createElement("button");
showInfoBtn.setAttribute("class", "el-button el-button--primary");
showInfoBtn.setAttribute("type", "button");
showInfoBtn.setAttribute(
"style",
"--el-button-bg-color:#409eff; --el-button-border-color:#409eff; --el-button-hover-bg-color:rgb(102, 177, 255); --el-button-hover-border-color:rgb(102, 177, 255); --el-button-active-bg-color:rgb(58, 142, 230); --el-button-active-border-color:rgb(58, 142, 230);"
);
showInfoBtn.setAttribute("onclick", "showIPInfo()");
showInfoBtn.innerHTML = '<span class="">显示 IP 信息</span>';
document.querySelector(".trace_button").appendChild(showInfoBtn);
// 增加显示 IP 信息脚本
var showInfoScript = document.createElement("script");
showInfoScript.setAttribute("type", "text/javascript");
showInfoScript.innerHTML = 'function showIPInfo(){var ipv4Reg=new RegExp(/\\((((2(5[0-5]|[0-4]\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3})\\)/,"i");var infoReg=new RegExp(/ms.*/,"i");document.querySelectorAll(".card-res").forEach(function(e){let ips=e.innerHTML.split("\\n");for(const i in ips){let ip=ips[i].match(ipv4Reg);if(ip&&ip[1])fetch("https://api.ip.sb/geoip/"+ip[1]).then(function(res){return res.json()}).then(function(data){let info=(data.asn?"AS"+data.asn+", ":"")+(data.country?data.country+", ":"")+(data.region?data.region+", ":(data.city?data.city+", ":""))+(data.isp?data.isp:(data.asn_organization?data.asn_organization:""));ips[i]=ips[i].replace(infoReg,"ms "+info);e.innerHTML=ips.join("\\n")})}})}';
document.getElementsByTagName('head')[0].appendChild(showInfoScript);
//脚本备份
/* function showIPInfo() {
var ipv4Reg = new RegExp(
/\((((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3})\)/,
"i"
);
var infoReg = new RegExp(/(ms.*)/, "i");
document.querySelectorAll(".card-res").forEach(function (e) {
let ips = e.innerHTML.split("\n");
for (const i in ips) {
let ip = ips[i].match(ipv4Reg)
if (ip && ip[1]) fetch("https://api.ip.sb/geoip/" + ip[1])
.then(function (res) {
return res.json();
})
.then(function (data) {
let info =
(data.asn ? "AS" + data.asn + ", " : "") +
(data.country ? data.country + ", " : "") +
(data.region ? data.region + ", " : (data.city ? data.city + ", " : "")) +
(data.isp ? data.isp : (data.asn_organization ? data.asn_organization : ""));
ips[i] = ips[i].replace(infoReg, "ms " + info);
e.innerHTML = ips.join("\n");
});
}
});
} */
})();