Validate IP function

From NSIS Wiki
Jump to navigationJump to search
Author: kichik (talk, contrib)


Description

Checks is a given IP address is valid and sets the error flag accordingly. The test is done in four steps. First, the given string is filtered to validate it contains only numbers and dots. Next, the number of dots is counted to validate it's 3 and the number of numbers is counted to validate it's 4. Finally, each number is validated by checking it's not out of range.

Usage Example

!include LogicLib.nsh
!include ValidateIP.nsh
 
Name "Validate IP test"
OutFile test.exe
 
XPStyle on
 
ShowInstDetails show
 
Section
 
  Push "192.168.2.124"
  Call ValidateIP
  ${If} ${Errors}
    DetailPrint "invalid IP"
  ${Else}
    DetailPrint "IP is ok"
  ${EndIf}
 
SectionEnd

Function Code

Put this code in a file named ValidateIP.nsh.

!include LogicLib.nsh
!include WordFunc.nsh
 
!insertmacro WordFind
!insertmacro StrFilter
 
Function ValidateIP
 
  Exch $0
  Push $1
  Push $2
 
  ${StrFilter} $0 1 "." "" $1
  ${If} $0 != $1
    # invalid charcaters used
    #   example: a127.0.0.1
    Goto error
  ${EndIf}
 
  ${WordFind} $0 . "#" $1
  ${If} $1 != 4
    # wrong number of numbers
    #   example: 127.0.0.
    Goto error
  ${EndIf}
 
  ${WordFind} $0 . "*" $1
  ${If} $1 != 3
    # wrong number of dots
    #   example: 127.0.0.1.
    Goto error
  ${EndIf}
 
  ${For} $2 1 4
    ${WordFind} $0 . +$2 $1
 
    ${If} $1 > 255
    ${OrIf} $1 < 0
      # invalid number
      #   example: 500.0.0.1
      Goto error
    ${EndIf}
  ${Next}
 
  Pop $2
  Pop $1
  Pop $0
 
  ClearErrors
 
  Return
 
  error:
 
    Pop $2
    Pop $1
    Pop $0
 
    SetErrors
 
FunctionEnd