Pregunta

Quiero obtener información whois de un nombre de dominio de mis programas c#/java.¿Existe una forma sencilla de hacer esto?

¿Fue útil?

Solución

Creo que la forma más sencilla es una conexión de socket a un servidor whois en el puerto 43.Envíe el nombre de dominio seguido de una nueva línea y lea la respuesta.

Otros consejos

Encontré un ejemplo perfecto de C# en dotnet-snippets.com (que ya no existe).

Son 11 líneas de código para copiar y pegar directamente en su propia aplicación.

/// <summary>
/// Gets the whois information.
/// </summary>
/// <param name="whoisServer">The whois server.</param>
/// <param name="url">The URL.</param>
/// <returns></returns>
private string GetWhoisInformation(string whoisServer, string url)
{
    StringBuilder stringBuilderResult = new StringBuilder();
    TcpClient tcpClinetWhois = new TcpClient(whoisServer, 43);
    NetworkStream networkStreamWhois = tcpClinetWhois.GetStream();
    BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois);
    StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois);

    streamWriter.WriteLine(url);
    streamWriter.Flush();

    StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois);

    while (!streamReaderReceive.EndOfStream)
        stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());

    return stringBuilderResult.ToString();
}

La respuesta de Thomas solo funcionará si sabes cual Servidor "whois" al que conectarse.

Hay muchas formas diferentes de averiguarlo, pero ninguna (AFAIK) que funcione de manera uniforme para todos los registros de dominio.

Algunos nombres de dominio admiten una SRV registro para el _nicname._tcp servicio en el DNS, pero hay problemas con eso porque aún no existe un estándar aceptado sobre cómo evitar que un subdominio sirva SRV registros que anulan los del registro oficial (ver http://tools.ietf.org/html/draft-sanz-whois-srv-00).

Para muchos TLD es posible enviar su consulta a <tld>.whois-servers.net.En realidad, esto funciona bastante bien, pero tenga en cuenta que no funcionará en todos los casos en los que haya dominios de segundo nivel oficialmente delegados.

Por ejemplo en .uk Hay varios subdominios oficiales, pero solo algunos de ellos están administrados por el .uk registro y los demás tienen sus propios servicios de WHOIS y esos no están en el whois-servers.net base de datos.

De manera confusa, también existen registros "no oficiales", como .uk.com, cual son en el whois-servers.net base de datos.

PD.el delimitador oficial de fin de línea en WHOIS, como ocurre con la mayoría de los protocolos del IETF, es CRLF, No solo LF.

Encontré algunos servicios web que ofrecen esta información.Este es gratis y funcionó muy bien para mí. http://www.webservicex.net/whois.asmx?op=GetWhoIS

Encontré un ejemplo perfecto de C# aquí.Son 11 líneas de código para copiar y pegar directamente en su propia aplicación.PERO PRIMERO debe agregar algunas declaraciones de uso para garantizar que los métodos de eliminación se llamen correctamente para evitar pérdidas de memoria:

StringBuilder stringBuilderResult = new StringBuilder();
using(TcpClient tcpClinetWhois = new TcpClient(whoIsServer, 43))
{
   using(NetworkStream networkStreamWhois = tcpClinetWhois.GetStream())
   {
      using(BufferedStream bufferedStreamWhois = new BufferedStream(networkStreamWhois))
      {
         using(StreamWriter streamWriter = new StreamWriter(bufferedStreamWhois))
         {
            streamWriter.WriteLine(url);
            streamWriter.Flush();
            using (StreamReader streamReaderReceive = new StreamReader(bufferedStreamWhois))
            {
               while (!streamReaderReceive.EndOfStream) stringBuilderResult.AppendLine(streamReaderReceive.ReadLine());
            }
         }
      }
   }
}

Aquí está la solución Java, que simplemente abre un shell y ejecuta whois:

import java.io.*;
import java.util.*;

public class ExecTest2 {
    public static void main(String[] args) throws IOException {
        Process result = Runtime.getRuntime().exec("whois stackoverflow.com");

        BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
        StringBuffer outputSB = new StringBuffer(40000);
        String s = null;

        while ((s = output.readLine()) != null) {
            outputSB.append(s + "\n");
            System.out.println(s);
        }

        String whoisStr = output.toString();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top