Frage

Ich will whois-Informationen einer domain von meiner c# - /java-Programmen.Gibt es eine einfache Möglichkeit, dies zu tun?

War es hilfreich?

Lösung

Ich denke, der einfachste Weg ist eine Socket-Verbindung zu einem Whois-Server auf Port 43. Senden Sie das Domain Namen durch eine neue Zeile gefolgt und die Antwort lesen.

Andere Tipps

Ich fand ein perfektes C # Beispiel auf dotnet-snippets.com (, die nicht mehr existiert ).

Es ist 11 Zeilen Code zu kopieren und direkt in Ihre eigene Anwendung einfügen.

/// <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' Antwort wird nur funktionieren, wenn Sie wissen, , die "whois" Server zu verbinden.

Es gibt viele verschiedene Möglichkeiten, das zu finden, aber keine (AFAIK), die einheitlich für jede Domain-Registrierung funktioniert.

Einige Domain-Namen unterstützen eine SRV Rekord für den _nicname._tcp Dienst in der DNS, aber es gibt Probleme mit, dass da gibt es keine allgemein anerkannte Standard noch wie eine Sub-Domain, um zu verhindern SRV Aufzeichnungen serviert welche überschreiben die von der offiziellen Registrierung (siehe http://tools.ietf.org/html/draft-sanz- whois-SRV-00 ).

Für viele TLDs ist es möglich, Ihre Anfrage an <tld>.whois-servers.net zu senden. Das funktioniert eigentlich ganz gut, aber Vorsicht, dass es nicht in allen Fällen funktioniert, wo es offiziell Second Level Domains übertragen werden.

Zum Beispiel in .uk gibt es mehrere offizielle Sub-Domains, aber nur einige von ihnen werden von der .uk Register laufen und die anderen haben ihre eigenen WHOIS Dienste und die sind nicht in der whois-servers.net Datenbank.

Verwirrend gibt es auch "inoffizielles" Register, wie .uk.com, die sind in der whois-servers.net Datenbank.

P. S. die offiziellen End-Of-Line-Trennzeichen in WHOIS, wie bei den meisten IETF-Protokollen sind CRLF, nicht nur LF.

Ich fand einige Web-Services, die diese Informationen bieten. Dieser ist kostenlos und funktionierte gut für mich. http://www.webservicex.net/whois.asmx?op=GetWhoIS

fand ich ein perfektes C # Beispiel hier. Es ist 11 Zeilen Code zu kopieren und direkt in Ihre eigene Anwendung einfügen. Aber zuerst sollten Sie einige using-Anweisungen hinzufügen, um sicherzustellen, dass die dispose Methoden ordnungsgemäß zu verhindern Speicherlecks genannt:

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

Hier ist die Java-Lösung, die nur eine Schale öffnet und läuft 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();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top