Подтвердить что ты не робот

Получить имя машины клиента в PHP

Эта программа возвращает имя машины клиента только в localhost

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

Если он запущен с онлайн-сервера, имя компьютера не отображается и отображается какая-либо другая информация. Так или иначе, чтобы получить имя компьютера в php, когда программа запускается с онлайн-сервера.

4b9b3361

Ответ 1

Что это за "другая информация"? IP-адрес?

В PHP вы используете $_SERVER['REMOTE_ADDR'] для получения IP-адреса удаленного клиента, затем вы можете использовать gethostbyaddr(), чтобы попробовать и конвертировать этот IP в имя хоста, но не все IP-адреса настроены на обратное сопоставление.

Ответ 2

Не в PHP.
phpinfo(32) содержит все PHP, которые могут знать о конкретном клиенте, и нет имени компьютера [windows]

Ответ 3

function GetComputerName()
{
    try
{
    var network = new ActiveXObject('WScript.Network');
    // Show a pop up if it works
    alert(network.computerName);
}
catch (e) { }
}

Это javascript, который будет работать в IE, иногда. Это лучшее, что вы можете сделать. Затем вы можете вставить это значение в элемент управления, а затем, когда пользователь отправляется на сервер, вы можете прочитать его на PHP. PHP не может делать то, что вы хотите, потому что он работает на сервере, а не на клиенте, поэтому он не может искать данные клиента.

Ответ 4

В отличие от большинства комментариев, я думаю, что можно получить имя хоста клиента (имя машины) в простом PHP, но оно немного "грязно".

Запрашивая авторизацию "NTLM" через HTTP-заголовок...

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/

Ответ 5

В руководстве PHP говорится:

gethostname (PHP >= 5.3.0) gethostname - получает имя хоста

Облик:

<?php
echo gethostname(); // may output e.g,: sandie
// Or, an option that also works before PHP 5.3
echo php_uname('n'); // may output e.g,: sandie
?>

http://php.net/manual/en/function.gethostname.php

Enjoy

Ответ 6

gethostname() с использованием IP-адреса от $_SERVER['REMOTE_ADDR'] при удаленном доступе к script будет возвращать IP-адрес вашего интернет-соединения, а не вашего компьютера.

Ответ 7

Попробуйте

echo getenv('COMPUTERNAME');

Это вернет ваше имя пользователя.