C# WebForms 实现域名 Whois 查询功能

Alice
Alice
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何在 C# WebForms 应用中实现域名 Whois 查询。通过 TCP 协议连接 Whois 服务器,解析顶级域后缀以匹配对应的服务端点,获取并显示注册信息。

核心逻辑与准备

Whois 查询依赖于互联网域名注册机构的公开数据库。不同的顶级域(TLD)由不同的注册局管理,因此需要将用户输入的域名拆分为“主机名”和“顶级域”,并根据顶级域选择正确的查询服务器。本示例基于传统的 ASP.NET WebForms 架构,使用 TcpClient 类建立底层网络连接。

服务端配置与路由

首先,需要确保运行环境支持 ASP.NET。在 web.config 中确认编译设置已启用 C# 语言支持。对于 IIS 或本地测试服务器,确保应用程序池使用 .NET Framework 版本(如 4.8),因为该代码使用了较旧的同步 IO 模式。

具体实现步骤

第1步:定义页面结构与控件

目的:提供用户输入域名和查看结果的界面。入口:创建 .aspx 文件。

  1. 声明页面语言为 C#。
  2. 引入必要的命名空间:System.Net.Sockets(网络通信)、System.Text、System.IO 和 System.Collections。
  3. 添加服务器端控件:asp:TextBox 用于接收域名输入,asp:Button 触发查询,asp:Label 显示结果。

第2步:实现域名有效性校验

目的:防止无效请求发送至 Whois 服务器。动作:在按钮点击事件中,首先对输入的域名进行基础格式检查。

  • 将域名按 . 分割。
  • 检查分割后的数组长度是否为 2(即仅包含一个子域名和一个顶级域,例如 example.com)。若不为2,则拒绝处理。
  • 检查顶级域的长度是否为 2 或 3 个字符。这是针对常见国家代码顶级域(ccTLD)和商业顶级域(gTLD)的基本约束。

第3步:映射 Whois 服务器地址

目的:根据顶级域确定正确的查询终端。动作:构建哈希表(Hashtable)存储特定顶级域对应的 Whois 服务器地址。

  1. 专用服务器映射:初始化 table 对象,添加已知规则,例如:
    "at" => "whois.nic.at"(奥地利)、"de" => "whois.denic.de"(德国)、"gov" => "whois.nic.gov"(政府机构)等。
  2. 默认逻辑:
    - 如果顶级域存在于哈希表中,使用该映射地址。
    - 否则,若顶级域长度为2位(通常为 ccTLD),默认指向欧洲注册信息机构 whois.ripe.net。
    - 其他情况(如通用顶级域 .com, .net)使用默认公共服务器,如 whois.OnlineNIC.com(注:实际生产中建议更新为当前有效的公共 Whois 网关)。

第4步:执行 TCP Whois 查询

目的:通过网络协议获取数据。动作:调用辅助方法 DoWhoisLookup。

  • 建立连接:创建 TcpClient 实例,尝试连接到选定的服务器地址的 43 端口。此端口是 Whois 服务的标准端口。若发生 SocketException,记录错误并返回失败状态。
  • 发送请求:将域名字符串转换为 ASCII 字节数组,并追加换行符 \r\n。通过 Stream.Write 将数据发送至服务器。
  • 读取响应:使用 StreamReader 按行读取服务器返回的数据。将每行内容追加至 StringBuilder 中进行拼接。
  • 资源清理:查询完成后,务必调用 tcpc.Close() 关闭连接,释放系统资源。

完成判断与注意事项

当 txtResult 显示的内容不再是 “Lookup failed” 且包含域名注册详细信息时,表示查询成功。请注意以下几点:

  1. 同步阻塞:上述代码使用同步 IO 操作。在生产环境的 Web 应用中,长时间等待 Whois 响应可能导致线程阻塞。建议在实际项目中将其重构为异步方法(async/await)以避免超时问题。
  2. 编码问题:Whois 服务器的返回内容可能包含非 ASCII 字符。示例中使用 Encoding.ASCII 可能在遇到多语言域名(IDN)时导致乱码,需根据具体需求调整为 UTF-8 或其他编码格式。
  3. 法律合规:批量查询或滥用 Whois 服务可能违反部分注册局的 Usage Rules。请确保仅用于合法的域名管理或学习研究用途。

以上就是 C# WebForms 独立域名查询代码的详细内容,更多关于 C# 网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表