Простая реализация проверки Forward Confirmed reverse DNS
FCrDNS, или Forward Confirmed Reverse DNS, это когда IP-адрес имеет прямую (имя -> IP) и обратную (IP -> имя) DNS-записи, которые, к тому же, соответствуют друг другу.
Сначала выполняется обратный DNS-запрос для получения списка PTR-записей (обычно возвращается только одна запись, но это не всегда так). Затем для каждого доменного имени, указанного в PTR-записях, выполняется обычный (прямой) DNS-запрос с целью проверки, что существует запись A или AAAA, совпадающая с исходным IP-адресом. Если это так, то проверка считается пройденной.
Проверка FCrDNS может считаться слабой формой аутентификации, устанавливающей, что есть действительная связь между владельцем доменного имени и владельцем сети, получившим данный IP-адрес. Хотя такая аутентификация и слаба, она достаточно хороша, для того, чтобы отсеивать спамеров и иже с ними, использующих компьютеры-зобми для подделки доменов.
Перевод Forward Confirmed reverse DNS.
А теперь о практической реализации.
$ip = 'IP ADDRESS HERE';
$rev = preg_replace('/^(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)$/', '$4.$3.$2.$1', $ip);
$authns = array();
$add = array();
$ptrs = @dns_get_record("{$rev}.IN-ADDR.ARPA.", DNS_PTR, $authns, $add);
if (true == empty($ptrs)) {
die('NXDOMAIN');
}
foreach ($ptrs as $x) {
if (true == isset($x['target'])) {
$target = $x['target'];
$a = @dns_get_record($target, DNS_A, $authns, $add);
if (true == is_array($a)) {
foreach ($a as $y) {
if (true == isset($y['ip'])) {
if ($ip == $y['ip']) {
die("FCrDNS check OK");
}
}
&