PHP原生fsockopen实现Whois域名查询

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

利用PHP内置的网络函数fsockopen可以方便地查询域名的注册信息。本文详解了如何通过域名后缀(TLD)匹配对应的WHOIS服务器地址,建立TCP连接并读取返回结果的完整逻辑。

原理与准备

Whois服务是用于查询域名和IP地址注册信息的分布式数据库系统。客户端需要连接到特定顶级域名(如.com、.cn)对应的权威服务器,通常监听在TCP 43端口。PHP可以通过其标准库中的fsockopen函数发起此类连接,获取文本形式的响应结果。

第1步:构建服务器映射表

目的:根据用户输入的域名后缀,找到对应的查询入口。由于不同后缀由不同的注册局管理,我们需要预先维护一个后缀到服务器地址的列表。
说明:该列表包含主流后缀的查询服务器。

$servers = array(
  "biz" => "whois.neulevel.biz",
  "com" => "whois.internic.net",
  "net" => "whois.internic.net",
  "org" => "whois.pir.org",
  "cn" => "whois.cnnic.net.cn",
  "us" => "whois.nic.us"
  // ...此处省略其他后缀映射
);

第2步:域名清洗与后缀提取

操作:接收到的输入可能包含http://前缀或www.子域名,需将其剥离以确保提取正确的后缀。
动作:首先移除常见的URL前缀,然后以点号为界截取最后一段作为后缀。

$domain = strtolower(trim($domain));
$domain = preg_replace('/^http:\/\//i', '', $domain);
$domain = preg_replace('/^www\./i', '', $domain);
$domain = explode('/', $domain);
$domain = trim($domain[0]);
$_domain = explode('.', $domain);
$ext = $_domain[count($_domain)-1];

第3步:建立连接并发送请求

注意:执行网络I/O操作时,建议设置超时时间以防程序挂起。此外,某些大型服务器可能会拒绝来自普通脚本的直接连接,此时可能需要更换代理或IP段。

  • 连接:调用fsockopen传入步骤一中匹配的服务器及端口43。
  • 写入:将处理后的域名字符串加上换行符(\r\n)发送给服务器。
  • 读取:循环读取直到文件结束(EOF),拼接结果。
if ($conn = fsockopen($nic_server, 43)) {
  fputs($conn, $domain . "\r\n");
  while(!feof($conn)) {
    $output .= fgets($conn, 128);
  }
  fclose($conn);
} else {
  die("Error: Connect failed.");
}

注意事项与维护

服务器失效问题:示例代码中引用的部分历史服务器(如whois.internic.net)近年来已逐渐停用或被重定向。在实际应用中,应查阅最新的ICANN Whois Server列表替换其中的映射关系。

超时设置:在网络环境复杂的场景下,务必给fsockopen添加第三个参数$timeout,否则如果目标服务器无响应,PHP进程将长时间卡死。

以上就是PHP实现Whois查询的详细步骤,更多关于PHP网络编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。