IP plug-in
Author: sunjammer (talk, contrib) |
Links
Ipdll.zip (9 KB)
Description
Version: 1.0.
Returns the IP's for your machine.
Known issue: no source code in the attached zip file.
On Win2008R2(64bit), Getip returns null string, this will cause the sample script below going deadloop.
Same for - x64 Win2008R0:
File: overwriteflag=1, allowskipfilesflag=2, name="C:\Users\ADMINI~1\AppData\Local\Temp\1\nsd601E.tmp\ip.dll" File: wrote 16896 to "C:\Users\ADMINI~1\AppData\Local\Temp\1\nsd601E.tmp\ip.dll" Error registering DLL: Could not load C:\Users\ADMINI~1\AppData\Local\Temp\1\nsd601E.tmp\ip.dll
If the author can attach the source, maybe I can help to change it to adapt to 64bit OS (also IPv6 support, maybe).
>> I think Runtime Library should be Multi-threaded Debug(/Mtd)
How to use
get_ip DLL Function
Syntax
ip::get_ip Pop "ResultVar"
Parameters
- ResultVar
- Returns the IP's for your machine in the format below:
ip;[ip2;[...]]
- Use the CheckIP function to check the type of IP's they are. Use GetNextIP function (included in the example) or other string functions to advance to the next IP address.
Example Script
Includes: CheckIP, VersionCheck functions.
outfile IpTest.exe name IpTest ; get_ip example ; by Hendri Adriaens ; HendriAdriaens@hotmail.com ; ; Usage: ; ip::get_ip ; Output: 'ip1;ip2;ip3;ip4;' ; (semi-colon delimited IP's list, on stack) ; ; Uses NSIS script to retrieve ; separate IP-addresses and to ; test whether or not it is an ; internet IP-address. Based on ; information by Joost Verburg: ; These ranges are for local networks: ; 10.x.x.x / 255.0.0.0 ; 172.16.x.x / 255.255.0.0 to 172.31.x.x / 255.255.0.0 ; 192.168.x.x / 255.255.255.0 ; 169.254.x.x / 255.255.0.0 ; and: ; 169.254.x.x is an Automatic Private IP Address, ; which you get when there is no DHCP server available, ; for example, Windows gives these addresses when you check ; "Obtain an IP address automatically" and you have no DHCP server. ; ; Further information has also been found at: ; http://home.t-online.de/home/TschiTschi/ip_adressierung.htm ; ; Script supplies two funcions: ; GetNextIp : get any IP (network and internet) ; CheckIP : determine IP type (see function header for available types) ; Script uses the VersionCheck ; function to test IP's. Section ; Code to use actual ExtensionDLL ; Current script provides an example ip::get_ip Pop $0 ; test entry ;StrCpy $0 '192.168.0.100;127.0.0.1;152.168.0.101;169.254.0.1;' Loop: Push $0 Call GetNextIp Call CheckIp Pop $2 ; Type of current IP-address Pop $1 ; Current IP-address Pop $0 ; Remaining addresses StrCmp $2 '1' '' NoLoopBackIp MessageBox MB_OK "LoopBack IP-address: $1" Goto Continue NoLoopBackIp: StrCmp $2 '2' '' NoAPA MessageBox MB_OK "Automatic Private IP-address: $1" Goto Continue NoAPA: StrCmp $2 '3' '' NoLanIp MessageBox MB_OK "Network IP-address: $1" Goto Continue NoLanIp: MessageBox MB_OK "Internet IP-address: $1" Continue: StrCmp $0 '' ExitLoop Loop ExitLoop: SectionEnd ; Function GetNextIp ; input: head of stack ; format: 'ip1;ip2;ip3;ip4;' ; output: 'ip1' head of stack ; 'ip2;ip3;ip4;' second entry of stack Function GetNextIp Exch $0 Push $1 Push $2 Strcpy $2 0 ; Counter Loop: IntOp $2 $2 + 1 StrCpy $1 $0 1 $2 StrCmp $1 '' ExitLoop StrCmp $1 ';' '' Loop StrCpy $1 $0 $2 ; IP-address IntOp $2 $2 + 1 StrCpy $0 $0 '' $2 ; Remaining string ExitLoop: Pop $2 Push $0 Exch 2 Pop $0 Exch $1 FunctionEnd ; Function CheckIP ; input: IP-address on stack ; output: additional entry on stack ; 1 - LoopBack IP (localhost, indicates no connection to a LAN or to the internet). ; 2 - Automatic Private IP Address (no DHCP server). ; 3 - Network IP. ; 4 - Internet IP. ; Eg: ; Push '192.168.0.100' ; Call CheckIP ; Pop $0 ; Contains '3' ; Pop $1 ; Contains '192.168.0.100' Function CheckIP Exch $0 Push $1 ; Check 127.x.x.x Push '127.0.0.0' Push $0 Call VersionCheck Pop $1 StrCmp $1 2 '' Range1 ; IP cannot be in range of LoopBack addresses Push '127.255.255.255' Push $0 Call VersionCheck Pop $1 StrCmp $1 1 LoopBack ; We found a LoopBack IP ; Check 10.x.x.x Range1: Push '10.0.0.0' Push $0 Call VersionCheck Pop $1 StrCmp $1 2 '' Range2 ; IP cannot be in range 1 Push '10.255.255.255' Push $0 Call VersionCheck Pop $1 StrCmp $1 1 LanIp ; We found a LanIp ; Check 172.16.x.x to 172.31.x.x Range2: Push '172.16.0.0' Push $0 Call VersionCheck Pop $1 StrCmp $1 2 '' Range3 ; IP cannot be in range 2 Push '172.31.255.255' Push $0 Call VersionCheck Pop $1 StrCmp $1 1 LanIp ; We found a LanIp ; Check 192.168.x.x Range3: Push '192.168.0.0' Push $0 Call VersionCheck Pop $1 StrCmp $1 2 '' Range4 ; IP cannot be in range 3 Push '192.168.255.255' Push $0 Call VersionCheck Pop $1 StrCmp $1 1 LanIp ; We found a LanIp ; Check 169.254.x.x Range4: Push '169.254.0.0' Push $0 Call VersionCheck Pop $1 StrCmp $1 2 '' InternetIp ; It should be an internet IP Push '169.254.255.255' Push $0 Call VersionCheck Pop $1 StrCmp $1 1 APA ; We found an Automatic Private IP Address Goto InternetIp ; Remaining addresses are internet IPs LoopBack: StrCpy $1 1 Goto Exit APA: StrCpy $1 2 Goto Exit LanIp: StrCpy $1 3 Goto Exit InternetIp: StrCpy $1 4 Exit: Exch $1 Exch 1 Exch $0 Exch 1 FunctionEnd ; Function VersionCheck ; input: 'v1', 'v2' on stack ; output 1 - if number 1 is newer ; 2 - if number 2 is newer ; 0 - if it is the same verion ; Eg: ; Push '3.5.1.4' ; Push '3.5' ; Call VersionCheck ; Pop $0 ; now contains 1 Function VersionCheck Exch $0 ;second versionnumber Exch Exch $1 ;first versionnumber Push $R0 ;counter for $0 Push $R1 ;counter for $1 Push $3 ;temp char Push $4 ;temp string for $0 Push $5 ;temp string for $1 StrCpy $R0 "-1" StrCpy $R1 "-1" Start: StrCpy $4 "" DotLoop0: IntOp $R0 $R0 + 1 StrCpy $3 $0 1 $R0 StrCmp $3 "" DotFound0 StrCmp $3 "." DotFound0 StrCpy $4 $4$3 Goto DotLoop0 DotFound0: StrCpy $5 "" DotLoop1: IntOp $R1 $R1 + 1 StrCpy $3 $1 1 $R1 StrCmp $3 "" DotFound1 StrCmp $3 "." DotFound1 StrCpy $5 $5$3 Goto DotLoop1 DotFound1: Strcmp $4 "" 0 Not4 StrCmp $5 "" Equal Goto Ver2Less Not4: StrCmp $5 "" Ver2More IntCmp $4 $5 Start Ver2Less Ver2More Equal: StrCpy $0 "0" Goto Finish Ver2Less: StrCpy $0 "1" Goto Finish Ver2More: StrCpy $0 "2" Finish: Pop $5 Pop $4 Pop $3 Pop $R1 Pop $R0 Pop $1 Exch $0 FunctionEnd
Versions History
- 1.0
- First version.
Credits
Written by Hendri Adriaens aka Smile2Me...