如何使用PHP从MX记录中查询所有对应的PTR反向解析记录
PHP查询MX对应IP的PTR记录方案
dns_get_record()查询PTR的核心规则
PTR是反向DNS记录,不能直接将IP地址作为参数传入dns_get_record()查询,需要先将IPv4地址按段倒序,拼接.in-addr.arpa后缀生成专用的查询域名,才能返回正确结果。
完整可运行代码
<?php $mx_records = array(); getmxrr("google.com",$mx_records,$mx_weight); for($i = 0; $i < count($mx_records);$i++) { $mxs[$mx_records[$i]] = $mx_weight[$i]; } asort($mxs); $records = array_keys($mxs); for($i = 0; $i < count($records); $i++) { $ip = gethostbyname($records[$i]); echo "MX主机:".$records[$i]." 对应IP:".$ip."\n"; // 构造PTR查询域名 $ip_segments = explode('.', $ip); $reversed_segments = array_reverse($ip_segments); $ptr_query = implode('.', $reversed_segments) . '.in-addr.arpa'; // 查询PTR记录 $ptr_result = dns_get_record($ptr_query, DNS_PTR); if (!empty($ptr_result)) { echo "对应PTR记录:".$ptr_result[0]['target']."\n"; } else { echo "该IP未配置PTR记录\n"; } echo "---\n"; } ?>
字段说明
dns_get_record($ptr_query, DNS_PTR)的返回值是二维数组:
- 查询成功且存在PTR记录时,数组第一个元素的
target字段即为PTR解析值 - 无对应PTR记录或查询失败时,返回空数组
- 第二个参数
DNS_PTR是PHP内置常量,指定本次DNS查询的类型为PTR记录
内容的提问来源于stack exchange,提问作者Rscalover
相关产品推荐
相关产品推荐

