如何用C 實現乙個Whois的查詢

2021-09-08 08:04:51 字數 2597 閱讀 3718

什麼是whois

簡單來說,whois就是乙個用來查詢網域名稱是否已經被註冊,以及註冊網域名稱的詳細資訊的資料庫(如網域名稱所有人、網域名稱註冊商、網域名稱註冊日期和過期日期等)。通過whois來實現對網域名稱資訊的查詢

什麼去查詢whois?

whois的查詢其實也是蠻簡單的,就是利用socket去連線whois提供的伺服器。whois服務的預設埠是43,查詢的話就是把網域名稱往這邊傳送過去,whois伺服器在收到你的請求後就會返回純文字的格式,這個寫起來真的蠻容易,比查詢dns協議簡單多了。

whois的伺服器有哪些呢?

nl whois.domain-registry.nl

eu whois.eu

edu whois.educause.net

net whois.crsnic.net

com whois.crsnic.net

org whois.crsnic.net

info whois.afilias.com

de whois.denic.de

cn whois.cnnic.net.cn

這些是我收集的whois伺服器

比如你要查詢的網域名稱 是www.zhenqiu.net 它是屬於 .net字尾的,這個時候你就要去 whois.crnic.net這邊來查詢了。

接下來我們來看具體的實現**。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.net;

using

system.net.sockets;

using

system.io;

namespace

qianfa.utility

//////

clear cache

///

public

static

void

clearcache()

}private

static

whois _instance 

=null

;private

static

object

_lock 

=new

object

();public

static

whois create(

string

path)

);_instance.serverlist.add(temp[

0].tolower(), temp[

1]);}}

}}return

_instance;

}public

dictionary

<

string

, string

>

serverlist;

//////

.pro','.name', and '.tv' domains require an account for a whois

///

///

///

public

string

lookup(

string

domain)

string

server 

=serverlist[suffix];

tcpclient client 

=new

tcpclient();

networkstream ns;

try//

else

//result 

+=encoding.getstring(buffer, 

0, i);i =

ns.read(buffer, 

0, buffer.length);}}

catch

(socketexception)

ns.close();

client.close();

return

result;}}

} 我是把whois的伺服器的檔案放在乙個文字檔案裡面 放在了

關鍵的部分就是 lookup方法了 lookup允許傳入的是網域名稱,然後我們會去判斷它是哪乙個字尾,然後得到它是用哪乙個server。接下來我們用

tcpclient去連線哪個server的43埠。把字串變成位元組流,傳送到伺服器,不斷的讀取伺服器傳送過來的內容 等到什麼也讀不到的時候就完成了這次查詢,(這種是同步模式),然後把位元組流變成字串,就完成了這乙個查詢了。

看一下demo是什麼用它的。

新建乙個webform page 在頁面裡面放乙個 label控制項取名為 lblresult。

哪麼這個頁面你就可以在瀏覽器裡輸入 http://yourserver:port/domainwhois.aspx?domain=zhenqiu.net.

我在實際專案中用到的位址是

public partial class domainwhois : system.web.ui.page

} }

如何用C 寫乙個類

其實寫乙個類很簡單,但是要寫乙個符合各方面要求的類,卻不是一件容易的事情。下面總結一下需要考慮的一些問題,先把暫時想到的方面記下來,以後想到新的在增加吧。類的生死和初始化 1.copy ctor和copy assignment是不是需要private 單例常用 或者是不是要用private繼承來阻止...

如何用c 製作乙個程式

程式設計思想 1.製作合適的窗體.2.將窗體變成圓形.3.設定好圓形窗體的初始位置 大小等資料 4.製作第一輪小球滾動 5.考慮多種情況.製作流程 1.this formborderstyle formborderstyle.none 視窗無邊框 this size newsize 50 50 窗體...

如何用兩個棧實現乙個佇列

問題 如何用兩個棧實現乙個對列的功能?思路 從棧a入佇列,從棧b出佇列。佇列的2個最重要的操作,入佇列,出佇列。入佇列 從棧a入佇列。出佇列 分兩種情況 如果棧b不為空,直接彈出。如果棧b為空,將棧a中的資料全部彈入棧b中,再從棧b彈出資料 實現如下 queuebystack.cpp 定義控制台應用...