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)
Quelle: Google-Crawler
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
Quelle: Verifying Googlebot
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
Googlebot]. https://support.google.com/webmasters/answer/1061943 [Google
Crawler/a>]. link://java/ausführungsshell-shell-befehl-von-java/[Shell ausführen
Befehl aus Java]