黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 网管频道 >> 网站建设 >> 文章正文
[推荐]用VB.net和ASP.net实现Whois.aspx查询系统
      ★★★★
用VB.net和ASP.net实现Whois.aspx查询系统
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-4-4
你想知道是谁在攻击你吗?你想知道网站的所有者吗?你想进行旁注攻击吗?这一切可以用一个工具轻松搞定----whois查询。(先吹下)今天我将让你看怎样实现所谓WHOIS,用 vb.net 和ASP.NET 书写Whois.Aspx 查询系统,来简单实现whois查询的功能,希望能够抛砖引玉。

关于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()

[1] [2] 下一页  

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886