fork download
  1. <?php
  2.  
  3. function checkIpWhitelist($ranges, $ip) {
  4. foreach ($ranges as $range) {
  5. if (isIpInRange($range, $ip)) return true;
  6. }
  7.  
  8. return false;
  9. }
  10.  
  11. function isIpInRange($rangeString, $ip) {
  12. if (!filter_var($ip, FILTER_VALIDATE_IP)) {
  13. throw new InvalidArgumentException('Provide a valid ip address, please. "'.$ip.'" is not valid');
  14. }
  15.  
  16. if (!preg_match('!^\d+(/\d+)?\.\d+(/\d+)?\.\d+(/\d+)?\.\d+(/\d+)?$!', $rangeString)) {
  17. throw new InvalidArgumentException('Provide a valid range, please. "'.$rangeString.'" is not valid');
  18. }
  19.  
  20. $range = array_map(function ($item) {
  21. $parts = explode('/', $item);
  22. if (count($parts) == 1) $parts[1] = $parts[0];
  23.  
  24. return array_map('intval', $parts);
  25. }, explode('.', $rangeString));
  26.  
  27. for ($i = 0; $i < 4; $i++) {
  28. // negative and non-numbers caught by the regular expression
  29. if ($range[$i][0] > $range[$i][1] || $range[$i][0] > 255 || $range[$i][1] > 255) {
  30. throw new InvalidArgumentException('Provide a valid range, please. "'.$rangeString.'" is not valid');
  31. }
  32. }
  33.  
  34. $ip = explode('.', $ip);
  35. for ($i = 0; $i < 4; $i++) {
  36. if (!($range[$i][0] <= $ip[$i] && $ip[$i] <= $range[$i][1])) return false;
  37. }
  38. return true;
  39. }
  40.  
  41.  
  42. $yIp = '192.168.59.3';
  43. $whitelist = array(
  44. '192.168.60.1',
  45. '192.168.0/50.3',
  46. '192.160/170.59.4'
  47. ),
  48. '192.168.60.1',
  49. '192.168.0/50.3',
  50. '192.160/170.59.3',
  51. '192.168.59.3'
  52. ),
  53. '192.168.60.1',
  54. '192.168.0/50.3',
  55. '192.160/167.59.3',
  56. '190/193.160/169.50/60.0/5',
  57. '192.168.59.3'
  58. )
  59. );
  60.  
  61. foreach($whitelist as $list){
  62. var_dump("\n\n" . (checkIpWhitelist($list, $yIp) ? 'IP in range!' : 'IP not in range') . "\n\n");
  63. }
  64. ?>
Success #stdin #stdout 0.02s 24192KB
stdin
Standard input is empty
stdout
string(19) "

IP not in range

"
string(16) "

IP in range!

"
string(16) "

IP in range!

"