public function isValid($value, $context = array()) { if (!isset($context['network'])) { $this->_error(self::NOT_IP_ADDRESS); return false; } $network = $context['network']; $maskPrefix = explode("/", $value); if (count($maskPrefix) == 2) { $value = $maskPrefix[1]; } $network_bytearray = App_Util_Ip::dtr_pton($network); if (is_numeric($value)) { if ($value <= 128 && $value > 0) { if (!filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $this->_error(self::INCOMPATIBLE_IP); return false; } $mask_bytearray = App_Util_Ip::dtr_pton(App_Util_Ip::long2ipv6($value)); if (($network_bytearray & $mask_bytearray) != $network_bytearray) { $this->_error(self::INCOMPATIBLE_NETWORK); return false; } return true; } else { $this->_error(self::INVALID_IPV6_PREFFIX); return false; } } if (parent::isValid($value)) { if (!filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { $this->_error(self::INCOMPATIBLE_IP); return false; } $mask_bytearray = App_Util_Ip::dtr_pton($value); if (($network_bytearray & $mask_bytearray) != $network_bytearray) { $this->_error(self::INCOMPATIBLE_NETWORK); return false; } return true; } return false; }
public function isValid($value) { $this->_setValue($value); try { if ($this->_version == App_Util_Ip::v4) { $host = ip2long($value); } else { $host = App_Util_Ip::dtr_pton($value); } } catch (Exception $e) { $this->_error(self::INVALID_VALUE); return false; } $check1 = $host & $this->_netmask; $check2 = $this->_subnet & $this->_netmask; if ($check1 == $check2) { return true; } $this->_error(self::NOT_ON_SUBNET); return false; }
public function testDtrPtonv6() { $ip = "fe80:1:2:3:a:bad:1dea:dad"; $this->assertEquals(current(unpack("A16", inet_pton($ip))), App_Util_Ip::dtr_pton($ip)); }