Advertisement
Guest User

Real-world IP v4 Check

a guest
Aug 27th, 2010
538
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <cfset sLocal = StructNew() />
  2. <cfparam name="ip" default="">
  3.  
  4. <cfset objIP = createObject("java","coldfusion.util.IPAddressUtils") />
  5.  
  6. <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>
  7. <h3>Currently <cfdump var="ip = #ip#"/></h3>
  8.  
  9. <cfform action="#cgi.SCRIPT_NAME#" format="html" method="post" name="myform">
  10.    
  11.     <p>username: <cfinput name="ip" value="#ip#" required="true" validate="NOBLANKS" ></p>
  12.     <p><input type="submit"></p>   
  13.  
  14. </cfform>
  15.  
  16. <cfif len(trim(ip))>
  17. <cfset myIP = trim(ip) />
  18.  
  19. <p>Check using isIP UDF: <cfdump var="#isIP(myIP)#" /></p>
  20.  
  21. <p>Check using validIPAddress: <cfdump var="#validIpAddress(myIP)#" /></p>
  22.  
  23. <p>Check using Internal CF:
  24.     <ul>
  25.         <li>validateIPAdress: <cfdump var = "#objIp.validateIPAdress(myIP)#"></li>
  26.         <li>validateIPv4Address: <cfdump var = "#objIp.validateIPv4Address(myIP)#"></li>
  27.         <li>validateIPv6Address: <cfdump var = "#objIp.validateIPv6Address(myIP)#"></li>
  28.     </ul>
  29. </p>
  30.  
  31. <p>Using Joseph's UDF: <cfdump var="#isIPV4(myIP)#" /></p>
  32.  
  33. </cfif>
  34.  
  35.  
  36.  
  37. <cfscript>
  38. /**
  39. * Returns TRUE if the string is a valid IP address.
  40. *
  41. * @param string      String to be checked.
  42. * @return Returns a boolean.
  43. * @author Nathan Dintenfass (nathan@changemedia.com)
  44. * @version 1, July 17, 2001
  45. */
  46. function isIP(ip){
  47.     var ii = 1;
  48.     //make sure it is a '.' delimited list 4 long
  49.     if(listlen(ip,".") is not 4) return false;
  50.  
  51.     //make sure each item is a number between 1 and 255
  52.     for(ii = 1;ii lte 4;ii = ii + 1){
  53.         if(not isnumeric(listgetat(ip,ii,".")) OR listgetat(ip,ii,".") GT 255 OR listgetat(ip,ii,".") LT 0)    return false;
  54.     }
  55.     //check for the special cases of 255.255.255.255 or 0.0.0.0, which is not really valid
  56.     if(ip is "255.255.255.255" OR IP is "0.0.0.0") return false;
  57.     return true;
  58. }
  59. </cfscript>
  60.  
  61. <cffunction name="validIpAddress" access="public" output="false" returntype="boolean" hint="returns T/F based on private rules for valid Ip address">
  62.    <cfargument name="theIpAddress" type="string" required="false" default="" hint=""/>
  63.       <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]?)">
  64.       <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]?)">
  65.       <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]?)">
  66.       <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]?)">
  67.  
  68.       <cfif !REFindNoCase(pattern,arguments.theIpAddress)>
  69.          <cfreturn false />
  70.       </cfif>
  71.  
  72.       <cfif !len(trim(arguments.theIpAddress))>
  73.          <cfreturn false />
  74.       </cfif>
  75.       <cfif arguments.theIpAddress eq "0.0.0.0" or arguments.theIpAddress eq "127.0.0.1" or arguments.theIpAddress eq "255.255.255.255">
  76.          <cfreturn false />
  77.       </cfif>
  78.  
  79.       <cfif REFindNoCase(pattern2,arguments.theIpAddress)>
  80.          <cfreturn false />
  81.       </cfif>
  82.  
  83.       <cfif REFindNoCase(pattern3,arguments.theIpAddress)>
  84.          <cfreturn false />
  85.       </cfif>
  86.  
  87.       <cfif REFindNoCase(pattern4,arguments.theIpAddress)>
  88.          <cfreturn false />
  89.       </cfif>
  90.  
  91.    <cfreturn true />
  92. </cffunction>
  93.  
  94. <!--- Written by Joseph Lamoree. Modified by Sami Hoda. --->
  95. <cffunction name="isIPV4" returntype="boolean" access="public" output="false">
  96.     <cfargument name="ip" type="string" required="true"/>
  97.  
  98.     <cfset var ba = arrayNew(1)/>
  99.     <cfset var b = ""/>
  100.  
  101.     <cfif reFind("[^0-9\.]", trim(arguments.ip)) gt 0>
  102.         <cfreturn false/>
  103.     </cfif>
  104.  
  105.     <cfset ba = listToArray(trim(arguments.ip), ".")/>
  106.     <!--- Should have four bytes --->
  107.     <cfif not arrayLen(ba) eq 4>
  108.         <cfreturn false/>
  109.     </cfif>
  110.  
  111.     <!--- First and last bytes should be non-zero --->
  112.     <cfif val(ba[1]) eq 0 or val(ba[4]) eq 0>
  113.         <cfreturn false/>
  114.     </cfif>
  115.    
  116.     <!--- Not all bytes should be 255 --->
  117.     <cfif (val(ba[1]) eq 255) AND (val(ba[2]) eq 255) AND (val(ba[3]) eq 255) AND (val(ba[4]) eq 255) >
  118.         <cfreturn false/>
  119.     </cfif>
  120.    
  121.     <cfloop array="#ba#" index="b">
  122.         <!--- No bytes should have leading zeros --->
  123.         <cfif len(b) gt 1 and left(b, 1) eq 0>
  124.             <cfreturn false/>
  125.         </cfif>
  126.         <!--- No bytes should be greater than 255 --->
  127.         <cfif val(b) gt 255>
  128.             <cfreturn false/>
  129.         </cfif>
  130.     </cfloop>
  131.  
  132.     <cfreturn true/>
  133. </cffunction>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement