首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取PHP中的客户端计算机名称

获取PHP中的客户端计算机名称
EN

Stack Overflow用户
提问于 2011-02-28 20:35:18
回答 6查看 141.7K关注 0票数 23

此程序仅返回localhost中的客户端计算机名称

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

如果它是从联机服务器运行的,则不显示计算机名,而显示一些其他信息。那么,当程序从在线服务器运行时,有没有办法在php中获取计算机名称。

EN

回答 6

Stack Overflow用户

发布于 2011-02-28 20:37:50

这个“其他信息”是什么?IP地址?

在PHP中,您可以使用$_SERVER['REMOTE_ADDR']获取远程客户机的IP地址,然后可以使用gethostbyaddr()尝试将该IP转换为主机名-但并不是所有的IP都配置了反向映射。

票数 11
EN

Stack Overflow用户

发布于 2011-02-28 20:36:45

不是在PHP中。

phpinfo(32)包含PHP能够知道的关于特定客户端的所有信息,并且没有windows计算机名称。

票数 6
EN

Stack Overflow用户

发布于 2017-05-08 15:27:57

与大多数评论相反,我认为可以用纯PHP获取客户机主机名(机器名),但它有点“脏”。

通过HTTP头请求"NTLM“授权...

代码语言:javascript
复制
if (!isset($headers['AUTHORIZATION']) || substr($headers['AUTHORIZATION'],0,4) !== 'NTLM'){
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: NTLM');
    exit;
}

您可以强制客户端以NTLM格式发送授权凭据。客户端发送到服务器的NTLM哈希除包含登录凭据外,还包含客户端计算机名称。这只适用于跨浏览器和PHP。

代码语言:javascript
复制
$auth = $headers['AUTHORIZATION'];

if (substr($auth,0,5) == 'NTLM ') {
    $msg = base64_decode(substr($auth, 5));
    if (substr($msg, 0, 8) != "NTLMSSPx00")
            die('error header not recognised');

    if ($msg[8] == "x01") {
            $msg2 = "NTLMSSPx00x02"."x00x00x00x00".
                    "x00x00x00x00".
                    "x01x02x81x01".
                    "x00x00x00x00x00x00x00x00".
                    "x00x00x00x00x00x00x00x00".
                    "x00x00x00x00x30x00x00x00";

            header('HTTP/1.1 401 Unauthorized');
            header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));
            exit;
    }
    else if ($msg[8] == "x03") {
            function get_msg_str($msg, $start, $unicode = true) {
                    $len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
                    $off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
                    if ($unicode)
                            return str_replace("\0", '', substr($msg, $off, $len));
                    else
                            return substr($msg, $off, $len);
            }
            $user = get_msg_str($msg, 36);
            $domain = get_msg_str($msg, 28);
            $workstation = get_msg_str($msg, 44);
            print "You are $user from $workstation.$domain";
    }
}

是的,这不是一个简单而简单的“读取机器名函数”,因为用户会得到一个对话框提示,但这是一个例子,它确实是可能的(相对于这里的其他语句)。

完整代码可在此处找到:https://en.code-bude.net/2017/05/07/how-to-read-client-hostname-in-php/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5142051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档