alias SRGIP {
if ($sock(SRGIP)) { sockclose SRGIP }
!sockopen SRGIP www.whatismyip.com 80
!sockmark SRGIP $1
echo $color(info).dd -s * [SRGIP] Resolving your IP address...
}
on *:CONNECT:{ SRGIP }
on *:sockopen:SRGIP:{
if ($sockerr) { echo color(info).dd -s * [SRGIP] Cannot resolve your ip: $sock($sockname).wsmsg }
else {
var %s = sockwrite -n $sockname
%s GET /automation/n09230945.asp HTTP/1.0
%s Host: $sock($sockname).addr
%s
}
}
on *:SOCKWRITE:SRGIP:{ If ($sockerr) { echo $color(info).dd -s * [SRGIP] Cannot resolve your ip: $sock($sockname).wsmsg } }
on *:sockread:SRGIP:{
if ($sockerr) { echo $color(info).dd -s * [SRGIP] Cannot resolve your ip: $sock($sockname).wsmsg }
else {
!sockread -f &a
var %s = $gettok($bvar(&a,1-).text,-1,10), %r = /^(?:\d{1,3}\.){3}\d{1,3}$/
if (!$regex(%s,%r)) { echo $color(info).dd -s * [SRGIP] Error parsing socket reply: $bvar(&a,1-).text }
else {
set -e %external.ip %s
if (($group(#set.ip.auto) == on) || ($sock($sockname).mark)) { .localinfo $host %s | echo $color(info).dd -s * [SRGIP] Resolved external IP: %s (set at 'local info') }
}
}
}
on *:SOCKCLOSE:SRGIP:{ if ($sockerr) { echo $color(info).dd -s * [SRGIP] Cannot resolve your ip: $sock($sockname).wsmsg } }
#set.ip.auto off
#set.ip.auto end
menu status {
Set 'local info' to external IP $+([,auto,$chr(58) $replace($group(#set.ip.auto).status,on,enabled,off,disabled),])
.$iif(($group(#set.ip.auto) == on),$style(1)) Auto on connect
..$iif(($group(#set.ip.auto) == on),disable,enable) automation : $iif(($group(#set.ip.auto) == on),.disable,.enable) #set.ip.auto
.&Set 'local info' to ext. IP now : { SRGIP verbose }
.-
.External IP $+ $chr(58) $iif((%external.ip),$v1,not resolved yet) : clipboard %external.ip
.Local info IP $+ $chr(58) $ip : clipboard $ip
.-
.&Reset 'local info'
..&normal (winsock) lookup : localinfo -h
..$iif(($status != connected),$style(2)) &userhost (server) lookup: localinfo -u
}