def self.resolve(host)
s = TCPSocket.new
begin
req = String.new
Socksify::debug_debug "Sending hostname to resolve: #{host}"
req << "\005"
if host =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
req << "\xF1\000\001" + [$1.to_i,
$2.to_i,
$3.to_i,
$4.to_i
].pack('CCCC')
elsif host =~ /^[:0-9a-f]+$/
raise "TCP/IPv6 over SOCKS is not yet supported (inet_pton missing in Ruby & not supported by Tor"
req << "\004"
else
req << "\xF0\000\003" + [host.size].pack('C') + host
end
req << [0].pack('n')
s.write req
addr, _port = s.socks_receive_reply
Socksify::debug_notice "Resolved #{host} as #{addr} over SOCKS"
addr
ensure
s.close
end
end