Necesito obtener el campo txt del registro DNS.
¿Hay alguna aplicación de rubi para hacer algo como esto?Obtener un registro TXT DNS en Ruby
nslookup -q=txt xxxx.com
Necesito obtener el campo txt del registro DNS.
¿Hay alguna aplicación de rubi para hacer algo como esto?Obtener un registro TXT DNS en Ruby
nslookup -q=txt xxxx.com
Intente instalar la gema dnsruby.
El código se mantiene activamente y se usa en algunos sistemas de producción importantes.
require 'rubygems'
require 'dnsruby'
include Dnsruby
# Use the system configured nameservers to run a query
res = Dnsruby::Resolver.new
ret = res.query("google.com", Types.TXT)
print ret.answer
(Código probados en MacOS X - imprime el registro Google SPF)
Véase también la respuesta de Alex @ que es más idiomático Ruby - Alex es el autor de dnsruby
.
Probar el Net::DNS gem.
Aquí se muestra un ejemplo:
result = Net::DNS::Resolver.start("google.com", Net::DNS::TXT)
values = result.each_mx.map { |r| r.txt }
# "v=spf1 include:_spf.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all "
Otras instrucciones para la instalación y uso se pueden encontrar en la página de Github vinculado anteriormente.
intenté usar Net :: DNS :: Resolver.start ("waycoolblog.com", Net :: DNS :: TXT). pero cuento obtener el valor para el campo txt. ¿cómo debería estar realmente usándolo? – anusuya
Creo que lo está usando correctamente, pero parece estar roto y en realidad no devuelve el registro TXT como debería. Lo siento. –
O sistema de uso ("nslookup -q = txt xxxx.com")
estoy pensando en no usar con el sistema() ya que puede ser muy caro. – anusuya
No será costoso en comparación con el costo de una búsqueda de DNS – nfm
Esto solo funcionaría en sistemas tipo Unix, no en ventanas o dispositivos. No es una buena solución para la mayoría de las aplicaciones de producción, pero funciona lo suficientemente bien para scripts únicos. @nfm: este método será más costoso ya que debe bifurcar un proceso, ejecutar el comando y aún hacer la búsqueda de DNS. – Allen
require 'dnsruby'
Dnsruby::DNS.open {|dns|
dns.each_resource("google.com", "TXT") {|rr| print rr}
# or
print dns.getresource("google.com", "TXT")}
}
Utilice el Rubí stdlib Resolv::DNS
biblioteca sin necesidad de instalar una joya:
require 'resolv'
txt = Resolv::DNS.open do |dns|
records = dns.getresources("_dmarc.yahoo.com", Resolv::DNS::Resource::IN::TXT)
records.empty? ? nil : records.map(&:data).join(" ")
end
#=> "v=DMARC1; p=reject; sp=none; pct=100; rua=mailto:[email protected], mailto:[email protected];"
getresources
devuelve una matriz de instancias del nombre solicitado clase registro (Resolv::DNS::Resource::IN::TXT
). Aquí, devuelvo nulo si los registros de TXT o el nombre de host no se encontraron, de lo contrario hago un mapa de los registros, llamo al data
para obtener los valores, luego los uniré.
Cualquier tipo de registro DNS [TXT, NS, CNAME, MX, ...] se puede consultar también reemplazando TXT en el ejemplo anterior.
Los registros TXT están "desestructurados" y se utilizan para datos mejorados para el nombre de host, como las configuraciones SPF, DKIM, DMARC. En la práctica, puede haber solo un registro TXT, pero el RFC no dice cuántos puede haber.
Lea los documentos en: http://www.ruby-doc.org/stdlib-2.1.1/libdoc/resolv/rdoc/index.html
Es bueno ver que alguien sugiera una solución integrada. ¡Gracias! – siannopollo
Rubí proporciona "Resolv" una biblioteca de resolución de DNS hilo-conscientes. Resolv puede manejar múltiples solicitudes de DNS al mismo tiempo sin bloquear todo el intérprete de Ruby.
Para la obtención de los registros MX de DNS
require "resolv"
Resolv::DNS.open do |dns|
ress = dns.getresources "infoir.com", Resolv::DNS::Resource::IN::MX
p ress.map { |r| [r.exchange.to_s, r.preference] }
end
Para los registros DNS A para conseguir
require "resolv"
Resolv::DNS.open do |dns|
ress = dns.getresources "infoir.com", Resolv::DNS::Resource::IN::A
p ress.map { |r| [r.exchange.to_s, r.preference] }
end
para obtener registros TXT DNS
require "resolv"
Resolv::DNS.open do |dns|
ress = dns.getresources "infoir.com", Resolv::DNS::Resource::IN::TXT
p ress.map { |r| [r.exchange.to_s, r.preference] }
end
Gracias, funciona perfecto. – anusuya
El enlace no funciona. Use este [enlace] (https://github.com/alexdalitz/dnsruby) – Penguin