хуйу нас не матерятся
Типичное решение для этой задачи - посмотреть логи и взять от туда ip поисковых роботов, либо ещё хуже- найти список адресов в интернетах. Но это ошибочный путь, потому что адреса серверов меняются, и нам придётся постоянно следить за актуальностью списка.
Правильный путь- вести белый список не ip адресов, а доменов. Мы можем зарезолвить доменное имя сервера по ip, и уже потом решить что с этим делать. То, что это единственно верный способ, говорится и в официальном руководстве google.
Например, так можно реализовать проверку на PHP:
<?php
$whiteList = [
'google.com' => true,
'googlebot.com' => true,
'yandex.ru' => true,
'yanedx.com' => true,
'yandex.net' => true
];
function checkWhitelist($ip, $whiteList) {
$host = gethostbyaddr($ip);
if( $host == $ip ) // Нет никакого домена на этом ip
return false;
// извлекаем главный домен
$hostParts = explode('.', $host);
$primaryDomain = $hostParts[count($hostParts) -2] . '.' . $hostParts[count($hostParts) -1];
if( isset($whiteList[$primaryDomain]) )
return true;
return false;
}
echo "Whitelisted? - " . checkWhitelist('66.249.66.1', $whiteList) . "
";
?>
Ну и то же самое на Nodejs:
var dns = require('dns');
var whiteList = {
'google.com': true,
'googlebot.com': true,
'yandex.ru': true,
'yanedx.com': true,
'yandex.net': true
};
function checkWhitelist(ip, cb) {
dns.reverse(ip, function(err, domains) {
if( err ) {
cb(false);
return;
} else {
var hostParts = domains[0].split('.');
var primaryDomain = hostParts[hostParts.length -2] + '.' + hostParts[hostParts.length -1];
if( whiteList[primaryDomain] ) {
cb(true)
return;
} else {
cb(false);
return;
}
}
})
}
checkWhitelist('66.249.66.1', function(result) {
console.log('Result:', result)
})