Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <cfset sLocal = StructNew() />
- <cfparam name="ip" default="">
- <cfset objIP = createObject("java","coldfusion.util.IPAddressUtils") />
- <h3>Enter a ip (or not :) ). Try 0.1.1.1, 0.0.0.0, 255.255.255.255, 192.168.0.0, 127.0.0.1, etc.</h3>
- <h3>Currently <cfdump var="ip = #ip#"/></h3>
- <cfform action="#cgi.SCRIPT_NAME#" format="html" method="post" name="myform">
- <p>username: <cfinput name="ip" value="#ip#" required="true" validate="NOBLANKS" ></p>
- <p><input type="submit"></p>
- </cfform>
- <cfif len(trim(ip))>
- <cfset myIP = trim(ip) />
- <p>Check using isIP UDF: <cfdump var="#isIP(myIP)#" /></p>
- <p>Check using validIPAddress: <cfdump var="#validIpAddress(myIP)#" /></p>
- <p>Check using Internal CF:
- <ul>
- <li>validateIPAdress: <cfdump var = "#objIp.validateIPAdress(myIP)#"></li>
- <li>validateIPv4Address: <cfdump var = "#objIp.validateIPv4Address(myIP)#"></li>
- <li>validateIPv6Address: <cfdump var = "#objIp.validateIPv6Address(myIP)#"></li>
- </ul>
- </p>
- <p>Using Joseph's UDF: <cfdump var="#isIPV4(myIP)#" /></p>
- </cfif>
- <cfscript>
- /**
- * Returns TRUE if the string is a valid IP address.
- *
- * @param string String to be checked.
- * @return Returns a boolean.
- * @author Nathan Dintenfass (nathan@changemedia.com)
- * @version 1, July 17, 2001
- */
- function isIP(ip){
- var ii = 1;
- //make sure it is a '.' delimited list 4 long
- if(listlen(ip,".") is not 4) return false;
- //make sure each item is a number between 1 and 255
- for(ii = 1;ii lte 4;ii = ii + 1){
- if(not isnumeric(listgetat(ip,ii,".")) OR listgetat(ip,ii,".") GT 255 OR listgetat(ip,ii,".") LT 0) return false;
- }
- //check for the special cases of 255.255.255.255 or 0.0.0.0, which is not really valid
- if(ip is "255.255.255.255" OR IP is "0.0.0.0") return false;
- return true;
- }
- </cfscript>
- <cffunction name="validIpAddress" access="public" output="false" returntype="boolean" hint="returns T/F based on private rules for valid Ip address">
- <cfargument name="theIpAddress" type="string" required="false" default="" hint=""/>
- <cfset var pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)">
- <cfset var pattern2 = "^(10)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)">
- <cfset var pattern3 = "^(172)\.(1[6-9]|2[0-9]|3[0-1])\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)">
- <cfset var pattern4 = "^(192)\.(168)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)">
- <cfif !REFindNoCase(pattern,arguments.theIpAddress)>
- <cfreturn false />
- </cfif>
- <cfif !len(trim(arguments.theIpAddress))>
- <cfreturn false />
- </cfif>
- <cfif arguments.theIpAddress eq "0.0.0.0" or arguments.theIpAddress eq "127.0.0.1" or arguments.theIpAddress eq "255.255.255.255">
- <cfreturn false />
- </cfif>
- <cfif REFindNoCase(pattern2,arguments.theIpAddress)>
- <cfreturn false />
- </cfif>
- <cfif REFindNoCase(pattern3,arguments.theIpAddress)>
- <cfreturn false />
- </cfif>
- <cfif REFindNoCase(pattern4,arguments.theIpAddress)>
- <cfreturn false />
- </cfif>
- <cfreturn true />
- </cffunction>
- <!--- Written by Joseph Lamoree. Modified by Sami Hoda. --->
- <cffunction name="isIPV4" returntype="boolean" access="public" output="false">
- <cfargument name="ip" type="string" required="true"/>
- <cfset var ba = arrayNew(1)/>
- <cfset var b = ""/>
- <cfif reFind("[^0-9\.]", trim(arguments.ip)) gt 0>
- <cfreturn false/>
- </cfif>
- <cfset ba = listToArray(trim(arguments.ip), ".")/>
- <!--- Should have four bytes --->
- <cfif not arrayLen(ba) eq 4>
- <cfreturn false/>
- </cfif>
- <!--- First and last bytes should be non-zero --->
- <cfif val(ba[1]) eq 0 or val(ba[4]) eq 0>
- <cfreturn false/>
- </cfif>
- <!--- Not all bytes should be 255 --->
- <cfif (val(ba[1]) eq 255) AND (val(ba[2]) eq 255) AND (val(ba[3]) eq 255) AND (val(ba[4]) eq 255) >
- <cfreturn false/>
- </cfif>
- <cfloop array="#ba#" index="b">
- <!--- No bytes should have leading zeros --->
- <cfif len(b) gt 1 and left(b, 1) eq 0>
- <cfreturn false/>
- </cfif>
- <!--- No bytes should be greater than 255 --->
- <cfif val(b) gt 255>
- <cfreturn false/>
- </cfif>
- </cfloop>
- <cfreturn true/>
- </cffunction>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement