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%
systemd-nspawn与unshare区别?
Firejail、Bubblewrap沙箱与docker、podman容器区别?
如何访问unshare -n -- python3 -m http.server 8000创建的网站url?
linux中如何限制进程执行非法的系统调用命令,例如reboot 删除等等?
pivot_root与chroot有啥区别?
linux中如何限制进程使用cpu、内存、网络的最大值?
用户态沙箱、硬件隔离、namespace + cgroups的隔离有啥不同?
OverlayFS、AUFS 、 Btrfs的区别是啥?
linux上各种Namespace有啥作用?
linux体积最小最精简的版本是多大?


