Laid up with an injured leg right now, so I spent yesterday playing around with powershell in Windows 10. Turns out it works great with the PB RunProgram function so..... its not that pretty right now but I slapped something together for demo/play purposes ....
Code: Select all
Procedure.b GetTestIPv46Valid(ipadrtoval$) ; works for IPv4 and IPv6
ipadr$ = Chr(34) + Chr(39) + ipadrtoval$ + Chr(39) + Chr(34)
OutCmd$ = ""
KeepOutCmdA$ = ""
CmdPromptRun = RunProgram("powershell.exe", " [System.Net.IPAddress]::TryParse( " + ipadr$ + ", [ref] $NULL)","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmdA$ = KeepOutCmdA$ + OutCmd$
Wend
KillProgram(CmdPromptRun)
CloseProgram(CmdPromptRun)
EndIf
If Trim(KeepOutCmdA$) = "True"
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.s GetIPv4ODNS() ; this one to get public IPv4 address
; multiple sources for Ipv4 address in case one is down, times out, or something....we have other sources to ensure we always get an Ipv4 address
gotipv4addrX.b = #True
gotipv4addrA.b = #True
gotipv4addrB.b = #True
gotipv4addrC.b = #True
gotipv4addrD.b = #True
gotipv4addrE.b = #True
gotipv4addrF.b = #True
gotipv4addrG.b = #True
gotipv4addrH.b = #True
gotipv4addrI.b = #True
gotipv4addrJ.b = #True
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " Resolve-DnsName" + " -Name whoami.akamai.com","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Position = FindString(KeepOutCmd$, "AnswerIP4Address", 1, #PB_String_NoCase)
getipline$ = Mid(KeepOutCmd$, Position)
Result4$ = Trim(RemoveString(getipline$, "AnswerIP4Address", #PB_String_NoCase))
Result4$ = Trim(RemoveString(Result4$, ":", #PB_String_NoCase))
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrX = #True
Else
gotipv4addrX = #False
Result4$ = "(No Information)"
EndIf
If gotipv4addrX = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " Resolve-DnsName" + " -Name myip.opendns.com" + " -Server resolver1.opendns.com","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Position = FindString(KeepOutCmd$, "Answer", 1, #PB_String_NoCase)
getipline$ = Mid(KeepOutCmd$, Position)
Result4$ = Trim(RemoveString(getipline$, "Answer", #PB_String_NoCase))
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrA = #True
Else
gotipv4addrA = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrA = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " Resolve-DnsName" + " -Name myip.opendns.com." + " -Server resolver2.opendns.com","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Position = FindString(KeepOutCmd$, "Answer", 1, #PB_String_NoCase)
getipline$ = Mid(KeepOutCmd$, Position)
Result4$ = Trim(RemoveString(getipline$, "Answer", #PB_String_NoCase))
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrB = #True
Else
gotipv4addrB = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrB = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " Resolve-DnsName" + " -Name whoami.akamai.net" + " -Server ns1-1.akamaitech.net","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Position = FindString(KeepOutCmd$, "Answer", 1, #PB_String_NoCase)
getipline$ = Mid(KeepOutCmd$, Position)
Result4$ = Trim(RemoveString(getipline$, "Answer", #PB_String_NoCase))
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrC = #True
Else
gotipv4addrC = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrC = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " Resolve-DnsName" + " -Name whoami.akamai.net" + " -Server NS2-193.AKAMAITECH.NET","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Position = FindString(KeepOutCmd$, "Answer", 1, #PB_String_NoCase)
getipline$ = Mid(KeepOutCmd$, Position)
Result4$ = Trim(RemoveString(getipline$, "Answer", #PB_String_NoCase))
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrD = #True
Else
gotipv4addrD = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrD = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $url = 'http://ipv4.whatismyip.akamai.com/'" + #CRLF$ + "$wc = New-Object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString($url)" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result4$ = KeepOutCmd$
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrE = #True
Else
gotipv4addrE = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrE = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $url = 'http://ipv4.myip.dk/api/info/IPv4Address'" + #CRLF$ + "$wc = New-Object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString($url)" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result4$ = RemoveString(KeepOutCmd$, Chr(34), #PB_String_NoCase, 1)
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrF = #True
Else
gotipv4addrF = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrF = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $wc = new-object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString('http://myexternalip.com/raw')" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result4$ = KeepOutCmd$
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrG = #True
Else
gotipv4addrG = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrG = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $wc = new-object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString('http://myip.dnsomatic.com/')" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result4$ = KeepOutCmd$
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrH = #True
Else
gotipv4addrH = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrH = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $wc = new-object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString('http://ipv4.icanhazip.com/')" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result4$ = KeepOutCmd$
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrI = #True
Else
gotipv4addrI = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrI = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $wc = new-object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString('http://ipinfo.io/ip')" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result4$ = KeepOutCmd$
If GetTestIPv46Valid(Result4$) = #True
Result4$ = Result4$
gotipv4addrJ = #True
Else
gotipv4addrJ = #False
Result4$ = "(No Information)"
EndIf
EndIf
If gotipv4addrA = #False And gotipv4addrB = #False And gotipv4addrC = #False And gotipv4addrD = #False And gotipv4addrE = #False And gotipv4addrF = #False And gotipv4addrG = #False And gotipv4addrH = #False And gotipv4addrI = #False And gotipv4addrJ = #False
Result4$ = "Unable to get IPv4 Address"
Else
Result4$ = Result4$
EndIf
ProcedureReturn Result4$
EndProcedure
Procedure.s GetIPv6ODNS() ; this one to get public IPv6 address
;OpenDNS IPv6 DNS Server = 2620:0:ccc::2 - 2620:0:ccd::2
; resolver1.ipv6-sandbox.opendns.com - resolver2.ipv6-sandbox.opendns.com
; note: these are recursive > https://www.opendns.com/about/innovations/ipv6/
gotipv6A.b = #True
gotipv6B.b = #True
gotipv6C.b = #True
gotipv6D.b = #True
gotipv6E.b = #True
gotipv6F.b = #True
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " nslookup myip.opendns.com 2620:0:ccc::2","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result1$ = RemoveString(KeepOutCmd$, "Address:", #PB_String_NoCase, 1)
Result2$ = RemoveString(Result1$, "Server:", #PB_String_NoCase, 1)
Result3$ = RemoveString(Result2$, "resolver1.ipv6-sandbox.opendns.com", #PB_String_NoCase, 1)
Result4$ = RemoveString(Result3$, "myip.opendns.com", #PB_String_NoCase, 1)
Result5$ = RemoveString(Result4$, "Name:", #PB_String_NoCase, 1)
Result5$ = RemoveString(Result5$, "2620:0:ccc::2", #PB_String_NoCase, 1)
Result6$ = Trim(Result5$)
If GetTestIPv46Valid(Result6$) = #True
Result6$ = Result6$
gotipv6A = #True
Else
gotipv6A = #False
EndIf
If gotipv6A = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " nslookup myip.opendns.com 2620:0:ccd::2","", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result1$ = RemoveString(KeepOutCmd$, "Address:", #PB_String_NoCase, 1)
Result2$ = RemoveString(Result1$, "Server:", #PB_String_NoCase, 1)
Result3$ = RemoveString(Result2$, "resolver2.ipv6-sandbox.opendns.com", #PB_String_NoCase, 1)
Result4$ = RemoveString(Result3$, "myip.opendns.com", #PB_String_NoCase, 1)
Result5$ = RemoveString(Result4$, "Name:", #PB_String_NoCase, 1)
Result5$ = RemoveString(Result5$, "2620:0:ccd::2", #PB_String_NoCase, 1)
Result6$ = Trim(Result5$)
If GetTestIPv46Valid(Result6$) = #True
Result6$ = Result6$
gotipv6B = #True
Else
gotipv6B = #False
EndIf
EndIf
If gotipv6B = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $url = 'http://ipv6.whatismyip.akamai.com/'" + #CRLF$ + "$wc = New-Object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString($url)" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result6$ = KeepOutCmd$
If GetTestIPv46Valid(Result6$) = #True
Result6$ = Result6$
gotipv6C = #True
Else
gotipv6C = #False
EndIf
EndIf
If gotipv6C = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $url = 'http://ipv6.myip.dk/api/info/IPv6Address/'" + #CRLF$ + "$wc = New-Object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString($url)" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result6$ = RemoveString(KeepOutCmd$, Chr(34), #PB_String_NoCase, 1)
If GetTestIPv46Valid(Result6$) = #True
Result6$ = Result6$
gotipv6D = #True
Else
gotipv6D = #False
EndIf
EndIf
If gotipv6D = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $wc = new-object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString('http://ipv6.icanhazip.com/')" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result6$ = KeepOutCmd$
If GetTestIPv46Valid(Result6$) = #True
Result6$ = Result6$
gotipv6E = #True
Else
gotipv6E = #False
EndIf
EndIf
If gotipv6E = #False
OutCmd$ = ""
KeepOutCmd$ = ""
CmdPromptRun = RunProgram("powershell.exe", " $url = 'http://ipv6.whatismyip.akamai.com/'" + #CRLF$ + "$wc = New-Object System.Net.WebClient" + #CRLF$ + "$wc.DownloadString($url)" + #CRLF$,"", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If CmdPromptRun
While ProgramRunning(CmdPromptRun)
OutCmd$=ReadProgramString(CmdPromptRun)
KeepOutCmd$ = KeepOutCmd$ + OutCmd$
Wend
CloseProgram(CmdPromptRun)
EndIf
Result6$ = KeepOutCmd$
If GetTestIPv46Valid(Result6$) = #True
Result6$ = Result6$
gotipv6F = #True
Else
gotipv6F = #False
EndIf
EndIf
If gotipv6A = #False And gotipv6B = #False And gotipv6C = #False And gotipv6D = #False And gotipv6E = #False And gotipv6F = #False
Result6$ = "Unable to get IPv6 Address or No Information or Non-RFC4291/section 2.2 format for IPv6 Info"
Else
Result6$ = Result6$
EndIf
ProcedureReturn Result6$
EndProcedure
Debug GetIPv4ODNS()
Debug GetIPv6ODNS()