此程序仅返回localhost中的客户端计算机名称
echo gethostbyaddr($_SERVER['REMOTE_ADDR']);
如果它是从联机服务器运行的,则不显示计算机名,而显示一些其他信息。那么,当程序从在线服务器运行时,有没有办法在php中获取计算机名称。
发布于 2011-02-28 20:37:50
这个“其他信息”是什么?IP地址?
在PHP中,您可以使用$_SERVER['REMOTE_ADDR']
获取远程客户机的IP地址,然后可以使用gethostbyaddr()
尝试将该IP转换为主机名-但并不是所有的IP都配置了反向映射。
发布于 2011-02-28 20:36:45
不是在PHP中。
phpinfo(32)
包含PHP能够知道的关于特定客户端的所有信息,并且没有windows计算机名称。
发布于 2017-05-08 15:27:57
与大多数评论相反,我认为可以用纯PHP获取客户机主机名(机器名),但它有点“脏”。
通过HTTP头请求"NTLM“授权...
if (!isset($headers['AUTHORIZATION']) || substr($headers['AUTHORIZATION'],0,4) !== 'NTLM'){
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: NTLM');
exit;
}
您可以强制客户端以NTLM格式发送授权凭据。客户端发送到服务器的NTLM哈希除包含登录凭据外,还包含客户端计算机名称。这只适用于跨浏览器和PHP。
$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/
https://stackoverflow.com/questions/5142051
复制相似问题