Статьи

Создайте поиск WHOIS в ASP.NET

Я слышал этот вопрос сотни раз: «Как мне написать скрипт, который будет проверять доступность домена?»

Сегодня я покажу вам, как реализовать так называемый сценарий WHOIS в C # и ASP.NET.

О WHOIS

Сценарий WHOIS используется для проверки доступности доменного имени или для выяснения, кому принадлежит конкретное доменное имя.

Могу поспорить, что вы уже использовали веб-поиск WHOIS, такой как http://checkdomain.com

Все, что вам нужно сделать, это ввести доменное имя, которое вы хотите проверить, и нажать кнопку отправки. В результате будет показана информация о владельце регистрации домена, если домен уже зарегистрирован, в противном случае вы получите сообщение о том, что домен все еще доступен.

Очевидно, что всякий раз, когда вы просматриваете WHOIS, вы запрашиваете какую-то базу данных, в которой хранится информация о регистрации. Однако эта база данных WHOIS не централизована, поэтому фактические доменные записи, как правило, не доступны с одного сервера WHOIS. Серверы WHOIS для регистрации доменных имен обслуживаются организацией, уполномоченной регистрировать доменные имена.

Как правило, серверы WHOIS принимают соединения через TCP через порт 43, поэтому мы можем общаться с сервером, если мы используем этот порт. Полный список серверов WHOIS можно найти на сайте http://www.mit.edu/afs/athena/contrib/potluck/Net-Services/whois-servers.list.

Импорт пространства имен

TcpClient .Net предоставляет нам класс TcpClient (пространство имен System.Net.Sockets ), и с его помощью мы собираемся подключиться к серверу WHOIS и напрямую запросить данные регистрации домена.

Сначала нам нужно импортировать пространства имен System.Net.Sockets , System.Text , System.IO и System.Text.RegularExpressions , потому что мы будем использовать их на нашей странице WHOIS ASP.NET:

 <% @Import Namespace="System.Net.Sockets" %>  <% @Import Namespace="System.Text" %>  <% @Import Namespace="System.IO" %>  <% @Import Namespace="System.Text.RegularExpressions" %> 
Подключение к хосту

Класс TcpClient предоставляет методы для подключения, отправки и получения данных по сети. Существует два способа подключения к удаленному хосту:

  1. Создайте экземпляр класса TcpClient без параметров, а затем вызовите один из трех TcpClient подключения TcpClient :

     TcpClient objTCPC = new TcpClient();  objTCPC.Connect("whois.networksolutions.com", 43); 
  2. Создайте экземпляр класса TcpClient используя имя хоста и номер порта сервера, к которому вы хотите подключиться. Этот конструктор автоматически установит ваше соединение:

     TcpClient objTCPC = new TcpClient  ("whois.networksolutions.com", 43);
    TcpClient objTCPC = new TcpClient  ("whois.networksolutions.com", 43); 

Отправка вашего запроса

Следующим шагом после успешного подключения к серверу WHOIS является отправка запроса на домен.

Сначала мы объявляем строку strDomain, которая будет содержать доменное имя, которое мы хотим найти. Мы объединяем « rn » в конец нашего strDomain, потому что это формат, ожидаемый серверами WHOIS. Наконец, мы кодируем наш strDomain в байтовый массив ( arrDomain ), используя метод GetBytes класса Encoding (пространство имен System.Text ).

 string strDomain = "domain-for-check.com" + "rn";  byte[] arrDomain = Encoding.ASCII.GetBytes(strDomain); 

Мы будем использовать метод GetStream для получения объекта Stream ( System.IO namespace ), который может отправлять и получать данные в подключенном сокете:

 Stream objStream = objTCPC.GetStream(); 

Получив доступ к объекту Stream , мы можем записать (отправить) последовательность байтов в текущий поток, используя метод Write :

 objStream.Write(arrDomain, 0, strDomain.Length); 

Получение ответа

Один из способов получить ответ сервера WHOIS — создать экземпляр класса StreamReader (пространство имен System.IO ), который считывает символы из потока байтов в определенной кодировке:

 StreamReader objSr = new StreamReader  (objTCPC.GetStream(), Encoding.ASCII); 

Следующим шагом является использование метода ReadToEnd нашего объекта objSr для получения ответа сервера WHOIS:

 string strServerResponse = objSr.ReadToEnd(); 

Поскольку мы сразу прочитали ответ сервера, нам нужно заменить символы новой строки » n » в нашем текстовом ответе на » <br> «, чтобы они правильно отображались в браузере. Мы можем сделать это с помощью класса Regex ( System.Text.RegularExpressions ) и, в частности, с его методом Replace :

 strServerResponse  = Regex.Replace  (strServerResponse, "n", "<br>"); 

Единственное, что остается сделать после того, как мы получим ответ сервера, — это присвоить значение lblResponse.Text свойству lblResponse.Text ( lblResponse — это наш серверный элемент управления lblResponse где будет отображаться результат) и закрыть TCP-соединение с сервером WHOIS:

 lblResponse.Text = strServerResponse;  objTCPC.Close(); 
Код

Таким образом, для создания страницы ASP.NET для поиска WHOIS необходимо:

  1. импортировать пространства имен System.Net.Sockets , System.Text , System.IO и System.Text.RegularExpressions на странице ASP.NET
  2. подключиться к серверу WHOIS с TcpClient класса TcpClient
  3. отправить запрос домена на сервер WHOIS
  4. читать ответ сервера через класс StreamReader
  5. замените символы новой строки » n » в ответе сервера на » <br> «, используя класс Regex
  6. отобразить строку ответа

Вот полностью функциональный код для страницы WHOIS ASP.NET. Помните, что используемые в примере серверы WHOIS могут быть заменены на любые действующие серверы WHOIS для справки. Проверьте http://www.mit.edu/afs/athena/contrib/potluck/Net-Services/whois-servers. список

Посмотрите этот полнофункциональный пример страницы ASP.NET WHOIS .

Вот код страницы:

 <% @Page Language="C#" Debug="false"%>  <% @Import Namespace="System.Net.Sockets" %>  <% @Import Namespace="System.Text" %>  <% @Import Namespace="System.IO" %>  <% @Import Namespace="System.Text.RegularExpressions" %>   <script language="C#" runat=server>   public void btn_Click(object sender, EventArgs eArgs)  {  try  {    TcpClient objTCPC = new TcpClient(Request.Form["WhoisServer"], 43);    string strDomain = Request.Form["DomainName"] + "rn";    byte[] arrDomain = Encoding.ASCII.GetBytes(strDomain);     Stream objStream = objTCPC.GetStream();    objStream.Write(arrDomain, 0, strDomain.Length);    StreamReader objSR = new StreamReader(objTCPC.GetStream(),  Encoding.ASCII);    lblResponse.Text = "<b>" + Request.Form["DomainName"] +  "</b><br><br>" + Regex.Replace(objSR.ReadToEnd(),"n","<br>");     objTCPC.Close();  }  catch(Exception ex)  {    lblResponse.Text = ex.ToString();  }  }   </script>    <html>  <head>  <style>  .main {font-family:Verdana; font-size:12px;}  .title {font-family:Verdana; font-size:18px; font-weight:bold;}  </style>  </head>  <body>  <span class="title" align="center">WHOIS ASP.NET page</span>   <form method="POST" name="MainForm" runat="server">  <table>  <tr>    <td class="main" align="right">Whois Server</td>    <td class="main">      <asp:DropDownList class="main" id="WhoisServer" runat="server">        <asp:ListItem value="whois.networksolutions.com">  whois.networksolutions.com (.COM, .NET, .EDU)</asp:ListItem>        <asp:ListItem value="whois.ripe.net">whois.ripe.net  (Europe)</asp:ListItem>        <asp:ListItem value="whois.cira.ca">whois.cira.ca (.CA)  </asp:ListItem>        <asp:ListItem value="whois.nic.uk">whois.nic.uk  (.CO.UK)</asp:ListItem>        <asp:ListItem value="whois.domain-registry.nl">  whois.domain-registry.nl (.NL)</asp:ListItem>      </asp:DropDownList>    </td>  </tr>  <tr>    <td class="main" align="right">Domain Name:</td>    <td class="main"><input type="text" class="main"  name="DomainName" value=""></td>  </tr>  <tr>    <td class="main">&nbsp;</td>    <td class="main"><input type="Submit" id="btnSubmit"  OnServerClick="btn_Click" value="Send" runat="server" /></td>  </tr>  </table>  <br><br>  <asp:Label class="main" id="lblResponse" runat="server"/>  </form>  </body>  </html>