Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ECONNRESET (Whois::ConnectionError) - Error Trying to Query Whois in Ruby

I'm writing a simple program in Ruby to check if a list of domains is taken. Basically it cycles through a list, and uses the following function to check.

require 'rubygems'
require 'whois'

def check_domain(domain)
  c = Whois::Client.new
  c.query("google.com").available?
end

The program keeps erroring out (even when I hardcode in google.com), and prints the message below. Given how simple the program is, I've run out of ideas - any suggestions?

/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:165:in `query_the_socket': Errno::ECONNRESET: Connection reset by peer (Whois::ConnectionError)
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/verisign.rb:41:in `request'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:113:in `query'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:150:in `buffer_start'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:112:in `query'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/client.rb:90:in `query'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/client.rb:87:in `query'
from checker.rb:7:in `check_domain'
from checker.rb:14
from checker.rb:11:in `each'
from checker.rb:11
like image 497
raven001 Avatar asked Apr 28 '11 21:04

raven001


2 Answers

The are two possible explanations to this issue:

  1. you are behind a firewall/proxy and the client can't reach the server
  2. (more realistic) your request is being throttled. Some .COM servers, such as GoDaddy, are used to reset the connection as a way to protect against multiple queries. See this ticket. You can solve this problem by limiting the number of requests to the same server.
like image 70
Simone Carletti Avatar answered Sep 23 '22 13:09

Simone Carletti


Try to use the timeout param:

irb(main):002:0> c = Whois::Client.new(:timeout => 100) # 100 seconds
irb(main):003:0> c.query("google.com").available?
=> true
like image 40
Vasiliy Ermolovich Avatar answered Sep 25 '22 13:09

Vasiliy Ermolovich