forwardinghosts.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. header('Content-Type: text/plain');
  3. require_once "vars.inc.php";
  4. ini_set('error_reporting', 0);
  5. function in_net($addr, $net)
  6. {
  7. $net = explode('/', $net);
  8. if (count($net) > 1)
  9. $mask = $net[1];
  10. $net = inet_pton($net[0]);
  11. $addr = inet_pton($addr);
  12. $length = strlen($net); // 4 for IPv4, 16 for IPv6
  13. if (strlen($net) != strlen($addr))
  14. return FALSE;
  15. if (!isset($mask))
  16. $mask = $length * 8;
  17. $addr_bin = '';
  18. $net_bin = '';
  19. for ($i = 0; $i < $length; ++$i)
  20. {
  21. $addr_bin .= str_pad(decbin(ord(substr($addr, $i, $i+1))), 8, '0', STR_PAD_LEFT);
  22. $net_bin .= str_pad(decbin(ord(substr($net, $i, $i+1))), 8, '0', STR_PAD_LEFT);
  23. }
  24. return substr($addr_bin, 0, $mask) == substr($net_bin, 0, $mask);
  25. }
  26. $dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;
  27. $opt = [
  28. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  29. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  30. PDO::ATTR_EMULATE_PREPARES => false,
  31. ];
  32. try {
  33. $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
  34. $stmt = $pdo->query("SELECT host FROM `forwarding_hosts`");
  35. $networks = $stmt->fetchAll(PDO::FETCH_COLUMN);
  36. foreach ($networks as $network)
  37. {
  38. if (in_net($_GET['host'], $network))
  39. {
  40. echo '200 permit';
  41. exit;
  42. }
  43. }
  44. echo '200 dunno';
  45. }
  46. catch (PDOException $e) {
  47. echo '200 dunno';
  48. exit;
  49. }
  50. ?>