首页 > 解决方案 > 查找正在访问该站点的机器的主机名

问题描述

我正在尝试将访问该站点的设备的名称插入数据库。

为了找到ip,我这样做:

$teste3 = $_SERVER["REMOTE_ADDR"];

要找出计算机的主机名,我正在执行以下操作:

$hostname = gethostbyaddr($teste3);

但是重新输入计算机的ip而不是计算机的主机名。

问题更新:

我网络中的 ips 是由活动目录分配的。没有活动目录注册设备的ip和主机名。有没有办法通过php中的dns获取主机名?

标签: php

解决方案


您正在寻找的是:gethostbyaddr

例子:

echo gethostbyaddr($_SERVER['REMOTE_ADDR']);

输出:host.example.com

编辑:第一个解决方案似乎对你不起作用。这是实际执行反向请求的一种肮脏方式。反向请求是:

  1. 从 IP 反转的八位字节
  2. 附加.in-addr.arpa
  3. PTR 请求。

您可以使用dns_get_record()请求执行此操作 这是一个应该可以工作的小脚本:

$remote_ip = $_SERVER['REMOTE_ADDR'];
$ip_array = explode(".", $remote_ip);

$reverse_ip_array = array_reverse($ip_array);
foreach ($reverse_ip_array as &$octet) {
    $request .= $octet;
    $request .= ".";
}

$request .= "in-addr.arpa";
$result_array = dns_get_record($request, DNS_PTR);


所以这现在存储了一个数组;

array(1) {
  [0] => array(5) {
    ["host"] => string(22) "1.0.0.127.in-addr.arpa" 
    ["class"] => string(2) "IN" 
    ["ttl"] => int(120)
    ["type"] => string(3) "PTR" 
    ["target"] => string(9) "localhost"
  }
}

因此,现在您可以使用isset()之类的方法验证数组是否在您的代码中正确构建

然后你可以对目标做任何事情: echo $result_array[0]["target"]) 输出localhost


推荐阅读