Code archives/Networking/Get External IP Address
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| External IP Address | |||||
' External IP detector
' by Marc van den dikkenberg / http://www.xlsior.org
'
' The following snippet uses a free IP lookup service provided by www.dyndns.org
' Please use sparingly to conserve their server resources
SuperStrict
Framework BRL.StandardIO
Import BRL.System
Import BRL.Bank
Import BRL.HTTPStream
Import BRL.Retro
AppTitle$="NAT IP Finder 1.0"
Local t:Int
Local MyIP:String
MyIP$=GetExternalIP()
If MyIP$="-1" Then
Notify "Error obtaining IP address",True
Else If MyIP$="0" Then
Notify "Error parsing IP data",True
Else
' IP Address found, let's copy to clipboard:
TextToClipboard(MyIP$)
Notify "External IP Address: "+myip$+" ~n~n(Copied to Clipboard)"
End If
End
Function GetExternalIP$()
Local ipstart:Int=0
Local ipend:Int=0
Local temp:Int=0
Local ResultBank:TBank
Local MyParsedIP:String
MyParsedIP$=""
ResultBank:TBank=LoadBank("http::checkip.dyndns.org")
If Not ResultBank Then
' Error - No Network Connection Detected
Return -1
Else
For temp=0 To BankSize(ResultBank:TBank)-1
MyParsedIP$=MyParsedIP$+Chr$(PeekByte(ResultBank:TBank,temp))
Next
ipstart=Instr(MyParsedIP$,":",1)+2
ipEnd= Instr(MyParsedIP$,"</body>",1)-1
MyParsedIP$=Mid$(MyParsedIP$,ipstart,ipend-ipstart)
If Len(MyParsedIP$)<7 Then
' Shortest possible IP = x.x.x.x
' Error - Could not detect IP address"
Return 0
Else
' External IP address successfully parsed
Return MyParsedIP$
End If
End If
End Function
Extern "Win32"
Function OpenClipboard%(hwnd%)
Function CloseClipboard%()
Function EmptyClipboard%()
Function SetClipboardData(format%, hMem:Byte Ptr)
Function GlobalAlloc(Flags:Int, Bytes:Int)
Function GlobalFree(Mem:Int)
Function GlobalLock:Byte Ptr(Mem:Int)
Function GlobalUnlock(Mem:Int)
End Extern
Function TextToClipboard(txt:String)
Const CF_TEXT%=$1
Const GMEM_MOVEABLE%=$2
Const GMEM_DDESHARE%=$2000
If txt$="" Return
Local TextBuf:Byte Ptr = Txt.ToCString()
Local Memblock:Int = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, txt.Length+1)
Local DataBuf:Byte Ptr = GlobalLock(Memblock)
MemCopy DataBuf, TextBuf, Txt.length
If OpenClipboard(0)
EmptyClipboard
SetClipboardData CF_TEXT, DataBuf
CloseClipboard
EndIf
GlobalUnlock Memblock
GlobalFree Memblock
End Function |
Comments
None.
Code Archives Forum