0

我存储每个请求的 IP 地址,以查看我收到了多少访问者视图。

Dim clientIPAddress As String = Request.ServerVariables("REMOTE_ADDR")
locationsDAL.AddLocationView(locationId, "", User.Identity.Name, clientIPAddress, "website")

但我注意到这也存储了爬取我网站的 MSN/Google 机器人等。

我怎样才能只存储非机器人的 IP 地址,所以真正的访客?

4

2 回答 2

0

官方模式是

http://www.bing.com/community/site_blogs/b/webmaster/archive/2012/08/31/how-to-verify-that-bingbot-is-bingbot.aspx

http://googlewebmastercentral.blogspot.com.es/2006/09/how-to-verify-googlebot.html

此外,您可以通过用户代理或范围 ips 检测机器人。

通用用户代理:

Googlebot
  Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Googlebot-Mobile
  Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)         
bingbot
    Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
MSNBot  
    msnbot-media/1.1 (+http://search.msn.com/msnbot.htm)        
MSRBOT  
    MSRBOT  
于 2012-09-09T10:10:55.727 回答
0

好的,所以我所做的是:

Dim clientIPAddress As String = Request.ServerVariables("REMOTE_ADDR")
If Not CheckIfCrawler(Dns.GetHostEntry(clientIPAddress).HostName) Then
 'log view
end 

Public Shared Function CheckIfCrawler(ByVal hostname As String) As Boolean
    If hostname.Contains("googlebot") Then
        Return True
    ElseIf hostname.Contains("msnbot") Then
        Return True
    ElseIf hostname.Contains("baiduspider") Then
        Return True
    ElseIf hostname.Contains("nipple3.mail.ru") Then
        Return True
    ElseIf hostname.Contains("reverse.wowrack.com") Then
        Return True
    ElseIf hostname.Contains("crawl") Then
        Return True
    ElseIf hostname.Contains("spider") Then
        Return True
    ElseIf hostname.Contains("nipple2.mail.ru") Then
        Return True
    Else
        Return False
    End If
 End Function

这样我就可以通过主机名排除大多数机器人。每 6 个月我会再次检查数据库,看看是否有任何特定的主机名有很多浏览量。然后,我使用 IP GeoDB 手动检查该主机名/IPAddress 是否属于机器人,如果是,则手动将其添加到 CheckIfCrawler 函数中。

于 2012-09-13T22:16:44.953 回答