5

大規模な検索エンジンを除くすべてのボットをブロックします。私のブロック方法の 1 つは、「言語」をチェックすることです: Accept-Language: If it has no Accept-Language ボットの IP アドレスは 2037 年までブロックされます.調べる

<?php
gethostbyaddr($_SERVER['REMOTE_ADDR']);
?>

を使用しても大丈夫ですgethostbyaddrか、誰かが私の「gethostbyaddr保護」を通過できますか?

4

5 に答える 5

4
function detectSearchBot($ip, $agent, &$hostname)
{
    $hostname = $ip;

    // check HTTP_USER_AGENT what not to touch gethostbyaddr in vain
    if (preg_match('/(?:google|yandex)bot/iu', $agent)) {
        // success - return host, fail - return ip or false
        $hostname = gethostbyaddr($ip);

        // https://support.google.com/webmasters/answer/80553
        if ($hostname !== false && $hostname != $ip) {
            // detect google and yandex search bots
            if (preg_match('/\.((?:google(?:bot)?|yandex)\.(?:com|ru))$/iu', $hostname)) {
                // success - return ip, fail - return hostname
                $ip = gethostbyname($hostname);

                if ($ip != $hostname) {
                    return true;
                }
            }
        }
    }

    return false;
}

私のプロジェクトでは、この関数を使用して Google と Yandex の検索ボットを識別しています。

detectSearchBot 関数の結果はキャッシュです。

アルゴリズムは Google の推奨事項に基づいています - https://support.google.com/webmasters/answer/80553

于 2019-10-24T05:53:50.030 に答える
2

Google が推奨する方法は、関連するホスト名を取得するために逆引き DNS ルックアップ (gethostbyaddr) を実行し、その名前を IP に解決し (gethostbyname)、それを remote_addr と比較することです (逆引きルックアップも偽造できるため)。 .

ただし、end lokups には時間がかかり、Web ページの速度が大幅に低下する可能性があることに注意してください (最初にユーザー エージェントを確認してください)。

https://webmasters.googleblog.com/2006/09/how-to-verify-googlebot.htmlを参照してください。

于 2016-05-23T09:09:47.117 に答える
2
//The function
function is_google() {
    return strpos($_SERVER['HTTP_USER_AGENT'],"Googlebot");
}
于 2010-06-20T01:24:42.290 に答える
1

Googlebotを確認する方法

于 2010-06-20T01:37:38.703 に答える