在网站运维、SEO分析或安全监控中,我们经常需要判断访问者的IP地址是否为合法的搜索引擎蜘蛛(如百度、Google等),而非恶意爬虫。一个可靠的方法就是进行反向DNS查询。本文将详细介绍由“接口盒子”提供的免费、高效的反向DNS查询与蜘蛛验证API接口。
一、接口简介
该接口的主要功能是查询指定IP地址的反向DNS记录,并基于此记录智能判断该IP是否属于已知的搜索引擎蜘蛛。其工作原理如下:
- 1.反向DNS查询:首先,接口会查询给定IP的PTR记录,获取其对应的域名(例如,IP
220.181.108.75可能对应baiduspider-220-181-108-75.crawl.baidu.com)。 - 2.蜘蛛模式匹配:接着,接口会将获取到的域名与内置的数十种国内外蜘蛛(如Baidu、Googlebot、Bingbot等)的域名模式进行匹配。
- 3.双向DNS验证:为提高准确性,接口还会进行正向验证,即将匹配到的域名再次进行正向DNS解析(A记录查询),检查解析出的IP列表中是否包含最初查询的IP。这一步能有效防止伪造的PTR记录。
重要提示:并非所有蜘蛛IP都设置了反向DNS记录,且蜘蛛的域名也可能发生变化。因此,该接口的识别结果仅供参考,但结合了双向验证后,其可靠性非常高。
二、接口基本信息
- •请求地址:
https://cn.apihz.cn/api/ip/fdns.php - •请求方式: GET 或 POST
- •返回格式: JSON
三、请求参数说明
参数名 |
类型 |
是否必填 |
说明 |
|
整数 |
是 |
用户中心的数字ID。需要注册账号后获取。 |
|
字符串 |
是 |
用户中心的通讯秘钥,用于认证。 |
|
字符串 |
否 |
要查询的IP地址(IPv4)。如不提供,则默认查询调用接口的客户端IP。示例: |
四、返回参数详解
返回的JSON数据包含丰富的状态和信息字段:
参数名 |
类型 |
说明 |
|
整数 |
状态码。 |
|
字符串 |
与状态码对应的详细消息,如“查询成功”。 |
|
字符串 |
你查询的IP地址。 |
|
字符串 |
查询到的反向DNS记录。如果不存在则为空。 |
|
布尔值 |
是否存在反向DNS记录。 |
|
布尔值 |
核心结果。是否被识别为蜘蛛。 |
|
布尔值 |
核心结果。双向验证是否通过。 |
|
浮点数 |
查询耗时,单位是毫秒(ms)。 |
|
字符串 |
数据缓存的时间戳。接口有1天缓存期。 |
|
对象 |
反向验证的详细数据集。 |
|
布尔值 |
反向DNS是否匹配到蜘蛛模式。 |
|
布尔值 |
是否检测到蜘蛛。 |
|
字符串 |
匹配到的蜘蛛域名模式(如 |
|
字符串 |
蜘蛛标识符(如 |
|
字符串 |
蜘蛛名称(如 |
|
对象 |
正向验证的详细数据集。 |
|
布尔值 |
是否执行了正向验证。 |
|
布尔值 |
正向验证是否匹配。 |
|
数组 |
将匹配到的域名进行正向解析得到的IP列表。 |
|
布尔值 |
查询的原始IP是否在 |
五、调用示例
重要:示例中的 id和 key为公共测试凭证,调用频次受限。请务必在接口盒子官网注册账号,获取您独享的 id和 key,以保证服务的稳定性。
1. 浏览器直接访问(GET请求)
最简单的方法是将参数直接拼接在URL后,在浏览器中访问即可看到结果。
复制
https://cn.apihz.cn/api/ip/fdns.php?id=88888888&key=88888888&ip=220.181.108.75
2. PHP调用示例
以下示例演示了如何使用PHP的cURL库进行GET请求,并解析返回的JSON数据。
php
复制
<?php // 你的API凭证(请替换成你自己的) $api_id = ‘你的用户ID‘; $api_key = ‘你的用户KEY‘; // 要查询的IP $ip_to_query = ‘220.181.108.75‘; // 构建请求URL $api_url = ‘https://cn.apihz.cn/api/ip/fdns.php‘; $request_url = $api_url . ‘?id=‘ . $api_id . ‘&key=‘ . $api_key . ‘&ip=‘ . $ip_to_query; // 初始化cURL $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $request_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将响应结果返回,而不是直接输出 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 简单起见,忽略SSL证书验证(生产环境建议开启) // 执行请求 $response = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 检查cURL错误 if (curl_error($ch)) { die(‘cURL请求发生错误: ‘ . curl_error($ch)); } curl_close($ch); // 解析JSON响应 $data = json_decode($response, true); // 处理结果 if ($data && $data[‘code‘] == 200) { echo “查询IP: “ . $data[‘ip‘] . “\n”; echo “反向DNS: “ . $data[‘reverse_dns‘] . “\n”; echo “是否为蜘蛛: “ . ($data[‘is_bot‘] ? ‘是‘ : ‘否‘) . “\n”; echo “双向验证通过: “ . ($data[‘verified‘] ? ‘是‘ : ‘否‘) . “\n”; if ($data[‘is_bot‘]) { echo “蜘蛛名称: “ . $data[‘reverse_verification‘][‘bot_name‘] . “\n”; } } else { echo “查询失败!错误信息: “ . $data[‘msg‘] . “\n”; } ?>
3. Python调用示例
以下示例使用Python内置的 urllib库进行GET请求。
python
下载
复制
运行
import urllib.request import urllib.parse import json # 你的API凭证(请替换成你自己的) api_id = "你的用户ID" api_key = "你的用户KEY" ip_to_query = "220.181.108.75" # 构建请求参数 params = { "id": api_id, "key": api_key, "ip": ip_to_query } # 将参数编码并拼接成URL query_string = urllib.parse.urlencode(params) url = f"https://cn.apihz.cn/api/ip/fdns.php?{query_string}" try: # 发起请求 with urllib.request.urlopen(url) as response: # 读取并解码响应内容 response_data = response.read().decode('utf-8') # 解析JSON数据 data = json.loads(response_data) # 处理结果 if data.get('code') == 200: print(f"查询IP: {data['ip']}") print(f"反向DNS: {data['reverse_dns']}") print(f"是否为蜘蛛: {'是' if data['is_bot'] else '否'}") print(f"双向验证通过: {'是' if data['verified'] else '否'}") if data['is_bot']: print(f"蜘蛛名称: {data['reverse_verification']['bot_name']}") else: print(f"查询失败!错误信息: {data.get('msg', 'Unknown error')}") except Exception as e: print(f"请求过程中发生错误: {e}")
六、成功返回示例解析
当我们使用上述示例查询百度蜘蛛IP时,会得到如下结构的JSON结果:
json
复制
{ "code": 200, "msg": "查询成功", "ip": "220.181.108.75", "reverse_dns": "baiduspider-220-181-108-75.crawl.baidu.com", "reverse_dns_exists": true, "reverse_verification": { "match": true, "detected_bot": true, "matched_pattern": ".baidu.com", "bot_id": "baidu", "bot_name": "Baidu" }, "forward_verification": { "performed": true, "match": true, "forward_ips": ["220.181.108.75"], "original_ip_in_forward_ips": true }, "is_bot": true, "verified": true, "query_time": 4749.81, "timestamp": "2025-12-08 13:29:52" }
结果解读:
- 1.查询的IP
220.181.108.75存在反向DNS记录,记录值为baiduspider-...crawl.baidu.com。 - 2.该域名匹配到了蜘蛛模式
.baidu.com,被识别为百度蜘蛛(Baidu)。 - 3.接口执行了正向验证,将
baiduspider-...crawl.baidu.com解析回IP地址,得到的IP列表(["220.181.108.75"])中包含了原始查询IP。 - 4.因此,最终结论
is_bot和verified均为true,可以确信该IP是真正的百度蜘蛛。
总结
接口盒子提供的反向DNS查询API是一个功能强大且易于使用的工具,特别适合用于:
- •网站日志分析:自动化识别搜索引擎蜘蛛的访问记录。
- •流量过滤:在应用程序中区分真实用户和搜索引擎爬虫。
- •安全防护:辅助判断可疑爬虫身份。
由于其免费、返回信息详尽且带有双向验证机制,对于开发者和运维人员来说,是一个非常实用的选择。只需简单注册,即可开始集成使用。