IP plug-in: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.) |
mNo edit summary |
||
Line 5: | Line 5: | ||
== Description == | == Description == | ||
'''Version:''' 1.0. | |||
== | Returns the IP's for your machine. | ||
== How to use == | |||
=== get_ip DLL Function === | |||
==== Syntax ==== | |||
<highlight-nsis> | |||
ip::get_ip | |||
Pop "ResultVar" | |||
</highlight-nsis> | |||
==== Parameters ==== | |||
;ResultVar | |||
:Returns the IP's for your machine in the format below: | |||
ip;[ip2;[...]] | |||
:Use the CheckIP function in the example script below to check the type of IP's they are. Use GetNextIP function to advance to the next IP addresses. | |||
==== Example Script ==== | |||
<highlight-nsis>outfile IpTest.exe | <highlight-nsis>outfile IpTest.exe | ||
name IpTest | name IpTest | ||
Line 16: | Line 37: | ||
; | ; | ||
; Usage: | ; Usage: | ||
; | ; ip::get_ip | ||
; | ; Output: 'ip1;ip2;ip3;ip4;' | ||
; (semi-colon delimited IP's list, on stack) | ; (semi-colon delimited IP's list, on stack) | ||
; | ; | ||
Line 50: | Line 71: | ||
; Current script provides an example | ; Current script provides an example | ||
ip::get_ip | |||
Pop $0 | |||
; test entry | ; test entry | ||
StrCpy $0 '192.168.0.100;127.0.0.1;152.168.0.101;169.254.0.1;' | ;StrCpy $0 '192.168.0.100;127.0.0.1;152.168.0.101;169.254.0.1;' | ||
Loop: | Loop: | ||
Line 81: | Line 100: | ||
StrCmp $0 '' ExitLoop Loop | StrCmp $0 '' ExitLoop Loop | ||
ExitLoop: | ExitLoop: | ||
SectionEnd | SectionEnd | ||
Line 280: | Line 298: | ||
Exch $0 | Exch $0 | ||
FunctionEnd</highlight-nsis> | FunctionEnd</highlight-nsis> | ||
== Versions History == | |||
;1.0 | |||
*First version. | |||
== Credits == | |||
Written by Hendri Adriaens aka [[User:Smile2Me|Smile2Me]]... | |||
[[Category:Plugins]] | [[Category:Plugins]] |
Revision as of 16:05, 3 December 2005
Author: sunjammer (talk, contrib) |
Links
Ipdll.zip (9 KB)
Description
Version: 1.0.
Returns the IP's for your machine.
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 in the example script below to check the type of IP's they are. Use GetNextIP function to advance to the next IP addresses.
Example Script
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...