|
关于WHOIS
WHOIS 既是一种协议,也是一种服务,使用 WHOIS ,就能透过 Internet 查询域名可用性,或者查明谁拥有这个域名,获知该域的已注册拥有者的信息 (包括姓名、地址、联系信息等等),那我们就来看看如何在 .NET 框架中实现WHOIS 。
一般来说,每当你做WHOIS 查找时,你询问登记信息被保存的某种数据库。 不过,WHOIS 数据库没被集中,因此实际域记录一般不可以从一台单个的WHOIS服务器中获得(记录域名的组织管理WHOIS服务器)。
通常,WHOIS服务器在43 端口上通过TCP 接受连接,因此如果我们使用这个端口,我们就能与服务器联系。我有一份WHOIS服务器的详细一览表,请访问http://wmjie.51.net/swords/blog/index.php?action=show&id=104
导入.NET 名字空间
.Net framework 提供了一个TcpClient 类 (System.Net.Sockets namespace), 属于 System.Net.Sockets 名称空间,TcpClient 类对 TCP 操作进行了抽象化,因而通过指定的 TCP 43端口建立连接、发送 TCP 请求和获取 TCP 返回值等操作都被简化了。用它我们就可以来连接 WHOIS 服务器直接获取域名注册信息。
首先我们需要用 Imports 语句导入 System,,System.Net,System.IO 和System.Net.Sockets名字空间:
<% @Import Namespace=System %>
<% @Import Namespace=System.Net %>
<% @Import Namespace=System.IO %>
<% @Import Namespace=System.Net.Sockets %>
连接whois服务器
TcpClient 类提供了连接connecting,发送 sending和接受receiving数据的方法,有两种方法可以连接远程服务器:
法一:初始化一个无参数的TcpClient类,然后再提供主机名和端口用Connect方法 连接
Dim WhoIsClient As New TcpClient()
WhoIsClient.Connect(request.form("WhoisServer"), 43)
法二:直接用主机名和端口初始化TcpClient,这样会进行自动化连接:
Dim WhoIsClient = new TcpClient (request.form("WhoisServer"), 43)
开始发出查询
在我们已经成功连接WHOIS服务器之后,下一步将送出我们的域名查询。
首先我们定义一个字符串变量Hostname,它接受我们想要查的域名。注意,我们一定要在末尾加上 vbcrlf ,因为那是WHOIS服务器期望的形式(如果不加vbcrlf,相当于回车,则会进入假死状态.如果用c#编写,一定要在末尾加"\r\n";)
Dim Hostname as string
Hostname=request.form("domainname") & vbcrlf
我们将使用GetStream 方法获得一个NetworkStream 对象(来自System.NET 名称空间),它用来在connected socket:接受和发送数据.
Dim WhoIsStream As NetworkStream
WhoIsStream = WhoIsClient.GetStream()
然后我们就可以初始化一个StreamWriter(来自System.IO 名称空间),它用来把Hostname查询字符串写入whois 查询服务器.然后用flush方法刷新缓冲区.
WhoIsWriter = New StreamWriter(WhoIsStream)
WhoIsWriter.Write(Hostname)
WhoIsWriter.Flush()
取回服务器反应数据
得到WHOIS服务器反应的方法之一StreamReader方法,它有两个参数,第一个参数是WhoIsClient.GetStream()返回的NetworkStream对象,第二个参数是编码方式,在vb.net里我们可以省略。
Dim WhoIsReader As StreamReader
WhoIsReader = New StreamReader(WhoIsStream)
steamreader取得反馈信息的方法有三种:
read:一次读取一个字符
readline:读取字符直到行尾
readtoend:读取字符直到流结尾
为了方便处理数据,我们选用第二种方法readline,此时我我们用peek()
方法判断是否到了流结尾,注意:peek()方法度取下以自负,但并不将其返回。
我们可以用一个web服务器控件label(id="lblResponse")来显示获取的数据。
while whoisreader.peek() > -1
lblResponse.text+=server.HTMLEncode(WhoIsReader.ReadLine) & "<br>"
end while
最后关闭到NetworkStream 流和到whois服务器的tcp连接。
WhoIsStream.Close()
WhoIsClient.Close()
| DIV+CSS布局的网页对网站SEO的影 | 09-27 |
| 网站设计的思考之网站首页的设计 | 08-27 |
| 强制设为首页的脚本代码 | 08-25 |
| 网站策划师的成长之路 | 07-11 |
| 提高网站流量的好方法 | 07-09 |
| 搜索引擎优化之关键词的优化 | 07-02 |
| 搜索引擎是如何侦测站群的? | 06-29 |
| 蔡文胜:经营个人网站“五部曲” | 06-12 |
| SEO的URL如何优化才是最佳 | 06-08 |
| Alexa排名到底有没有用处? | 05-18 |
| Alexa排名全新机制详解 | 05-18 |
| 最权威的雅虎排名秘笈(1~6) | 05-18 |