كيفية الحصول على معلومات whois اسم المجال في البرنامج ؟

StackOverflow https://stackoverflow.com/questions/53623

  •  09-06-2019
  •  | 
  •  

سؤال

أريد الحصول على معلومات whois اسم النطاق من c#/برامج جافا.هناك طريقة بسيطة للقيام بذلك ؟

هل كانت مفيدة؟

المحلول

أعتقد أن أسهل طريقة هي مأخذ اتصال whois server على المنفذ 43.وإرسال domainname تليها السطر و قراءة الاستجابة.

نصائح أخرى

وجدت الكمال C# على سبيل المثال dotnet-snippets.com (التي لا وجود لها بعد الآن).

انها 11 أسطر من التعليمات البرمجية إلى نسخ ولصق مباشرة إلى التطبيق الخاص بك.

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

توماس الجواب سوف تعمل فقط إذا كنت تعرف التي "whois" ملقم للاتصال.

هناك العديد من الطرق المختلفة لمعرفة ذلك, ولكن لا شيء (AFAIK) التي تعمل بشكل موحد لكل مجال التسجيل.

بعض أسماء النطاقات دعم SRV سجل _nicname._tcp خدمة DNS ، ولكن هناك مشاكل مع هذا لأنه لا يوجد معيار مقبول حتى الآن على كيفية منع فرعي من خدمة SRV السجلات التي تجاوز تلك الرسمية التسجيل (انظر http://tools.ietf.org/html/draft-sanz-whois-srv-00).

العديد من نطاقات Tld من الممكن إرسال الاستعلام إلى <tld>.whois-servers.net.هذا في الواقع يعمل بشكل جيد جدا, ولكن حذار أن ذلك لن يعمل في جميع الحالات التي توجد فيها رسميا تفويض نطاقات المستوى الثاني.

على سبيل المثال في .uk هناك عدة الرسمية المجالات الفرعية ، ولكن فقط يتم تشغيل بعض من قبل .uk التسجيل و آخرون WHOIS الخاصة والخدمات هؤلاء ليسوا في whois-servers.net قاعدة البيانات.

مشوش هناك أيضا "غير رسمية" السجلات ، مثل .uk.com, ، هي في whois-servers.net قاعدة البيانات.

p.s.الرسمية نهاية خط محدد في WHOIS, كما هو الحال مع معظم IETF البروتوكولات CRLF, ليس فقط LF.

لقد وجدت بعض الخدمات على شبكة الإنترنت التي تقدم هذه المعلومات.هذا هو واحد حر يعمل كبيرة بالنسبة لي. http://www.webservicex.net/whois.asmx?op=GetWhoIS

وجدت الكمال C# على سبيل المثال هنا.انها 11 أسطر من التعليمات البرمجية إلى نسخ ولصق مباشرة إلى التطبيق الخاص بك.ولكن أولا يجب عليك إضافة بعض باستخدام البيانات لضمان التخلص طرق دعا صحيح لمنع التسرب في الذاكرة:

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

وهنا جافا الحل الذي يفتح قذيفة يعمل 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();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top