Sha256: 22f2eabb9a11e094f3078efdd59e36d38214ab106fb5fcb0bf93dc0aea9b42e4

Contents?: true

Size: 1.07 KB

Versions: 21

Compression:

Stored size: 1.07 KB

Contents

#:stopdoc:
module RailsConnector

  module GooglebotChecker
    require 'socket'

    protected

    def referer_is_google?
      return true if request.headers['Referer'] =~ /google/
    end

    def is_genuine_googlebot?(ip_address)
      if ip_address =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/
        host = reverse_dns_lookup_for_ip(ip_address)
        return false unless host =~ /googlebot.com$/
        res = forward_dns_matcher(host, ip_address)
        return res
      else
        return false
      end
    end

    private

    def reverse_dns_lookup_for_ip(ip_address)
      begin
        addr = Socket.gethostbyname(ip_address)
        Socket.gethostbyaddr(addr[3],Socket::AF_INET)[0]
      rescue
        []
      end
    end

    def forward_dns_matcher(host, ip_address)
      begin
        lookup = Socket.getaddrinfo(host, 0,
                  Socket::AF_INET, Socket::SOCK_STREAM, nil,
                  Socket::AI_CANONNAME)
        return true if lookup.collect {|info| info[3]}.uniq.include?(ip_address)
      rescue
        false
      end
      false
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
infopark_rails_connector-6.8.0.210.ed204b0 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.110.6570b45 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.72.d18d096 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.23.da7f96b lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.16.def5e85 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.15.a24f5ff lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.891.647580e lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.889.d503e42 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.883.f5f063b lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.884.4bd86e6 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.869.9609b39 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.856.8c0fec5 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.809.bdfa8c3 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.785.05d4af9 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.744.99f67fc lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.720.44fbabd lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.713.e5c3150 lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.681.7c84f4a lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.663.ceecdee lib/rails_connector/googlebot_checker.rb
infopark_rails_connector-6.8.0.beta.200.650.7c93155 lib/rails_connector/googlebot_checker.rb