Advertisement
Guest User

Untitled

a guest
Apr 25th, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. <?php
  2.  
  3. function ipVersion($ip)
  4. {
  5. return strpos($ip, ":") === false ? 4 : 6;
  6. }
  7.  
  8. function inRange($ip, $ranges)
  9. {
  10. $ranges = (array)$ranges;
  11. $addressLength = ipVersion($ip) == 4 ? 32 : 128;
  12. foreach ($ranges as $range) {
  13. list($address, $cidr) = explode('/', $range);
  14. if ((bindec(ip2bin($ip)) & ~((1 << ($addressLength - $cidr)) - 1)) == bindec(ip2bin($address))) {
  15. return true;
  16. }
  17. }
  18. return false;
  19. }
  20.  
  21. /**
  22. * Converts IP address to bits representation
  23. *
  24. * @param $ip string
  25. * @return string string of bits
  26. */
  27. function ip2bin($ip)
  28. {
  29. if (ipVersion($ip) == 4) {
  30. return str_pad(base_convert(ip2long($ip), 10, 2), 32, '0', STR_PAD_LEFT);
  31. } else {
  32. $unpack = unpack("A16", inet_pton($ip));
  33. $binStr = array_shift($unpack);
  34. $bits = 16; // 16*8 bit = 128 bit (IPv6)
  35. $result = '';
  36. while ($bits-- > 0) {
  37. $result = sprintf("%08b", isset($binStr[$bits]) ? ord($binStr[$bits]) : '0') . $result;
  38. }
  39. return $result;
  40. }
  41. }
  42.  
  43. echo "\n2001:ab::1 as BIN(str): ";
  44. var_dump(ip2bin('2001:ab::1'));
  45. echo "same as DEC: ";
  46. var_dump(bindec(ip2bin('2001:ab::1')));
  47.  
  48. echo "\n\nIPv4 10.0.1.5: ";
  49. var_dump(ip2bin('10.0.1.5'));
  50. echo "same as DEC: ";
  51. var_dump(bindec(ip2bin('10.0.1.5')));
  52.  
  53. echo "\n\nAnd here is an IPv4 mask /30:";
  54. var_dump(decbin(~(1 << (32 - 30)) - 1));
  55.  
  56. echo "\n\nBut unable to create a bit mask grater than int(32). For example /64:";
  57. var_dump(decbin(~(1 << (128-64)) - 1));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement