Question

Je veux obtenir des informations whois du nom de domaine de mon c#/java programmes.Est-il un moyen simple de faire cela?

Était-ce utile?

La solution

Je pense que, le plus simple est une socket de connexion à un serveur whois sur le port 43.Envoyer le nom de domaine suivi par un saut de ligne et de lire la réponse.

Autres conseils

J'ai trouvé un parfait exemple en C# sur dotnet-snippets.com (qui n'existe plus).

Il est 11 lignes de code à copier et coller directement dans votre propre application.

/// <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();
}

Thomas réponse ne fonctionnera que si vous savez qui "whois" serveur de connexion.

Il existe de nombreuses façons de trouver, mais aucun (à ma connaissance) qui fonctionne de manière uniforme pour tous les domaines de registre.

Certains noms de domaine de l'appui d'une SRV record pour le _nicname._tcp service dans le DNS, mais il y a des problèmes avec cela, car il n'y a pas de norme acceptée et encore sur la façon de prévenir un sous-domaine de servir SRV les dossiers qui l'emportent sur celles du registre officiel (voir http://tools.ietf.org/html/draft-sanz-whois-srv-00).

Pour de nombreux Tld, il est possible d'envoyer votre requête à <tld>.whois-servers.net.Cela fonctionne assez bien, mais attention, il ne fonctionnera pas dans tous les cas où il y a officiellement délégué de second niveau des domaines.

Par exemple, dans .uk il y a plusieurs sous-domaines, mais seulement certains d'entre eux sont gérés par la .uk de registre et les autres ont leurs propres services WHOIS et ceux qui ne sont pas dans le whois-servers.net la base de données.

De prêter à confusion, il y a aussi des "non officiel", les registres, tels que .uk.com, qui sont dans le whois-servers.net la base de données.

p.s.la Fin officielle De délimiteur de Ligne dans le WHOIS, comme avec la plupart des protocoles IETF est CRLF, pas seulement LF.

J'ai trouvé certains services web qui offrent cette information.Celui-ci est gratuit et a très bien fonctionné pour moi. http://www.webservicex.net/whois.asmx?op=GetWhoIS

J'ai trouvé un parfait exemple en C# ici.Il est 11 lignes de code à copier et coller directement dans votre propre application.MAIS d'ABORD, vous devez ajouter un peu de l'aide d'instructions pour s'assurer que les méthodes dispose sont correctement appelé à empêcher les fuites de mémoire:

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());
            }
         }
      }
   }
}

Voici la solution Java, qui s'ouvre seulement une coquille et s'exécute 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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top