Java - Prüfen Sie, ob die Webanforderung vom Google-Crawler stammt

google-Bot

Wenn eine Webanforderung von einem Google-Crawler oder einem Google-Bot stammt, sollte der angeforderte "User-Agent" folgendermaßen aussehen:

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
or
(rarely used): Googlebot/2.1 (+http://www.google.com/bot.html)

1. Java-Beispiel

In Java können Sie den "Benutzeragenten" über "HttpServletRequest" erhalten.

Beispiel: Auf abcdefg.com gehosteter Dienst

    @Autowired
    private HttpServletRequest request;

   //...
    String userAgent =  request.getHeader("user-agent");

    System.out.println("User Agent : " + userAgent);

    if(!StringUtils.isEmpty(userAgent)){
        if(userAgent.toLowerCase().contains("googlebot")){
            System.out.println("This is Google bot");
        }else{
            System.out.println("Not from Google");
        }

    }

2. Gefälschter Benutzeragent

Es ist einfach, eine gefälschte/gefälschte Benutzeragentenanforderung zu erstellen. Zum Beispiel :

Beispiel: Senden Sie eine falsche Benutzeragentenanforderung an abcdefg.com

package com.mkyong.web;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

public class test {

    public static void main(String[]args) throws Exception {

        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet("abcdefg.com");
        request.setHeader("user-agent", "fake googlebot");
        HttpResponse response = client.execute(request);

    }

}

Ausgabe bei abcdefg.com.

User Agent : fake googlebot

This is Google bot

3. Googlebot überprüfen

Um den echten Googlebot zu überprüfen, können Sie "Reverse DNS Lookup" manuell wie folgt verwenden:

> host 66.249.66.1
1.66.249.66.in-addr.arpa domain name pointer
crawl-66-249-66-1.googlebot.com.

> host crawl-66-249-66-1.googlebot.com
crawl-66-249-66-1.googlebot.com has address 66.249.66.1

4. Googlebot überprüfen - Java-Beispiel

Basierend auf der obigen Theorie können wir den ersten Teil des "Reverse DNS Lookup" simulieren. Verwenden Sie den Befehl "host", um festzustellen, wo sich der angeforderte IP-Punkt befindet.

Wenn die Anfrage von Googlebot stammt, wird dieses Muster angezeigt:

xx ** .googlebot.com. .

Der P.S-Befehl host ist nur auf dem ** nix-System verfügbar.

Beispiel: Gefälschter Benutzeragent erkennen

    @Autowired
    private HttpServletRequest request;

   //...
    String requestIp = getRequestIp();
    String userAgent = request.getHeader("user-agent");

    System.out.println("User Agent : " + userAgent);

    if(!StringUtils.isEmpty(userAgent)){

        if(userAgent.toLowerCase().contains("googlebot")){

           //check fake user agent
            String output = executeCommand("host " + requestIp);
            System.out.println("Output : " + output);

            if(output.toLowerCase().contains("googlebot.com")){
                System.out.println("This is Google bot");
            }else{
                System.out.println("This is fake user agent");
            }

        }else{
            System.out.println("Not from Google");
        }
    }

   //get requested IP
    private String getRequestIp() {
        String ipAddress = request.getHeader("X-FORWARDED-FOR");
        if (ipAddress == null) {
            ipAddress = request.getRemoteAddr();
        }
        return ipAddress;
    }

   //execute external command
    private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader =
                new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

    }

Wiederholen Sie das Beispiel des gefälschten Benutzeragenten „Schritt 2“. Nun erhalten Sie diese Ausgabe:

Output : Host 142.1.168.192.in-addr.arpa. not found: 3(NXDOMAIN)//this output may vary.

User Agent : fake googlebot
This is fake user agent
  • Hinweis ** Diese einfache Lösung kann den gefälschten/gefälschten Benutzeragenten möglicherweise nicht zu 100% stoppen, aber diese zusätzliche Sicherheitsschicht sollte in der Lage sein, die meisten grundlegenden Angriffe durch Benutzeragenten zu verhindern.

Wenn Sie eine bessere Lösung haben, teilen Sie dies bitte weiter unten, danke.

Referenzen

Crawler/a>]. link://java/ausführungsshell-shell-befehl-von-java/[Shell ausführen

Befehl aus Java]