php如何获取一个域名不同地区的解析ip地址?
网友回复
以下是几种获取域名在不同地区 DNS 解析 IP 的方法:
使用系统 DNS 解析:function getDnsRecords($domain) { $records = dns_get_record($domain, DNS_A + DNS_AAAA); $ips = []; foreach ($records as $record) { if (isset($record['ip'])) { $ips[] = $record['ip']; } elseif (isset($record['ipv6'])) { $ips[] = $record['ipv6']; } } return $ips; }使用特定 DNS 服务器查询:
function getIpFromDns($domain, $dnsServer) { $cmd = "dig @{$dnsServer} {$domain} +short"; exec($cmd, $output, $return_var); return $output; } // 使用不同地区的 DNS 服务器 $dnsServers = [ 'us' => '8.8.8.8', // Google DNS (美国) 'cn' => '119.29.29.29', // 腾讯 DNS (中国) 'jp' => '1.1.1.1', // Cloudflare DNS (亚太) ]; $results = []; foreach ($dnsServers as $region => $server) { $results[$region] = getIpFromDns('example.com', $server); }使用 Socket 直接查询 DNS 服务器:
function queryDns($domain, $dnsServer, $port = 53, $timeout = 3) { try { // 创建 UDP socket $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, ['sec' => $timeout, 'usec' => 0]); // 构建 DNS 查询包 $header = "\xAA\xAA\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00"; $question = ""; foreach (explode(".", $domain) as $part) { $question .= chr(strlen($part)) . $part; } $question .= "\x00\x00\x01\x00\x01"; $query = $header . $question; // 发送查询 socket_sendto($sock, $query, strlen($query), 0, $dnsServer, $port); // 接收响应 $response = ''; socket_recvfrom($sock, $response, 1024, 0, $from, $port); // 解析响应 $ips = []; if (strlen($response) > 0) { // 简单解析响应中的 IP 地址 $pos = s...
点击查看剩余70%