Open the
$HOME/Library/Widgets/iStat Pro.wdgt/scripts/core.js
script in a text editor, find the
getExtIP()
function and replace the following line:
ipURL = 'http://whatsmyip.islayer.com/?random='+new Date().getTime();
with this (or a similiar "what's my ip" service URL):
ipURL = 'http://www.whatsmyip.us/showipsimple.php?random='+new Date().getTime();
And the following:
if(extIP.length < 20 && ipConnection.status == 200 && extIP.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)){
With these:
ip_regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
if(extIP.length < 100000 && ipConnection.status == 200 && extIP.match(new RegExp(ip_regex))){
extIP = extIP.replace(new RegExp("^(.*[^\\d])?(" + ip_regex + ")([^\\d].*)?$"), "$2");
This patch lets you use quite many "what's my IP" services since the the script will take the first IP looking string from the result of the HTTP request.
Comments
ipslayer.com and whatsmyip.us replacement
ipify.org is a drop-in replacement for the original code:
ipURL = 'http://api.ipify.org/?format=xml';
ipConnection = new XMLHttpRequest();
ipConnection.open("GET",ipURL,true);
ipConnection.onreadystatechange = function() {
if(ipConnection.readyState == 4 && ipConnection.responseText != null && ipConnection.responseText.length > 0) {
extIP = ipConnection.responseText;
if(ipConnection.status == 200)
Re: ipslayer.com and whatsmyip.us replacement
does not work
Re: does not work
missing close quote in first line
ipURL = 'http://api.ipify.org/?format=xml';
Re: missing close quote in first line
Don't forget to killall Dock
If you have just made this fix:
sudo killall Dock
to force the existing iStat to load the new code
New Fix
function getExtIP(){
ipURL = 'http://api.ipify.org/?format=xml';
ipConnection = new XMLHttpRequest();
ipConnection.open("GET",ipURL,true);
ipConnection.onreadystatechange = function() {
if(ipConnection.readyState == 4 && ipConnection.responseText != null && ipConnection.responseText.length > 0) {
extIP = ipConnection.responseText;
extIP_len = extIP.length;
if(extIP.length < 20 && ipConnection.status == 200 && extIP.match(/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/)){
e("wide_extip").innerHTML = extIP;
e("tall_extip").innerHTML = extIP;
valid_ip = true;
} else {
valid_ip = false;
e("wide_extip").innerHTML = "Unknown";
e("tall_extip").innerHTML = "Unknown";
}
}
}
ipConnection.send(null);
}