Ler o nome de host do cliente em PHP – código-bude.net

Ler o nome de host do cliente em PHP No artigo a seguir para ser é, como você pode ler o nome de host do cliente, então o nome do computador do visitante, utilizando PHP. Procurando na net, você rapidamente descobrirá, que a coisa toda não é tão trivial. Também você obter respostas completamente erradas ou você obtém soluções que são implementadas em PHP, mas por exemplo em VBScript, diz que não é. Porque ele funciona mas, eu quero mostrar agora como você pode ler o nome do computador.

Mas antes de olharmos para a solução, vamos dar uma olhada curta as soluções propostas na Web e explicar por que eles são mal ou não recomendados.

Como não ler a partir do nome de host do cliente

É frequentemente sugerido, mas definitivamente errado:

gethostname() de eco;

Embora o comando lê um nome de host, mas este é o nome do servidor que está executando o script e não o cliente. Só funciona se o script PHP está sendo executado localmente. Neste caso, mas de qualquer forma, você sabe o nome de host do cliente.

Muitas vezes leio o seguinte na rede:

gethostbyaddr($_SERVER[‘REMOTE_ADDR’]) de eco;

Esse código pressupõe vista primeiro do endereço IP público do cliente ($ Server [‘REMOTE_ADDR’]) e as tentativas para determinar o host então um nome. Normalmente, um roteador e por trás de muitos dispositivos de cliente, escondidos atrás do endereço público mas. Porque o script em execução em um servidor, mas não está disponível na rede do cliente, ele não tem acesso para o DNS que está familiarizado com o nome de host do cliente. Será apenas o IP tem retornado ou mais alto do nome do host, o provedor de Internet de IP público mapear para o. Isso não ajuda muito.

Solução a seguir é muitas vezes sugerido e funciona pelo menos em alguns casos:

rede de var = ActiveXObject(‘WScript.Network’);alert(network.computerName) novo;

No entanto, estas soluções também tem várias limitações. Por um lado, a solução é baseado em JavaScript e ActiveX. Novamente no servidor para ser capaz de avaliar o valor da, você teria que enviar essas costas pelo AJAX para o servidor. Além disso, esta solução apenas no Internet Explorer, que reduz novamente os trabalhos de benefícios práticos.

Afinal, agora é tão claro, por que as diferentes soluções não são adequadas, vamos olhar para nós, como conseguir ainda no nome do cliente.

Nome de computador de leitura em PHP

E como é que é “certo”? Uma solução que funciona também no chrome, Internet Explorer, Firefox, edge é o cabeçalho de “autorização” para usar. Usando um script PHP, uma autorização no formato “NTLM” é solicitada pelo visitante. Em seguida, o usuário obtém exibida uma caixa de diálogo de logon. Os dados de usuário digitado são submetidos para o servidor como hash NTLM. O destaque do mesmo? O hash transmitido contém o “nome de host do cliente procurado por nós” nome do computador local – ergo.

Na prática, a aplicação consiste de duas partes. Partir do código que requer a autenticação NTLM e por outro lado, o código que lê o nome do computador do hash NTLM.

Se (! function_exists(‘apache_request_headers’)) {função apache_request_headers() {$arh = array (); $rx_http = ‘ / \AHTTP_/’; foreach ($ Server como $key => $val) {se (preg_match ($rx_http, $key)) {$arh_key = preg_replace ($rx_http, ‘, $key); array (); = $rx_matches $rx_}}} corresponde = explode (‘_’, $arh_key); Se (count($rx_matches) > 0 e strlen($arh_key) > 2) {foreach ($rx_matches como $ak_key => $ak_val) $rx_matches [$ak_key] ucfirst($ak_val); = $arh_key = implode (‘-‘, $rx_matches);} $arh [$arh_key] = $val; retorno de {}} ($arh); }} $headers apache_request_headers (); if = (! isset($headers[‘AUTHORIZATION’]) | substr($headers[‘AUTHORIZATION’],0,4)! = = ‘NTLM’) {cabeçalho (‘ HTTP/1.1 401 não autorizado’); cabeçalho (‘WWW-Authenticate: NTLM’); exit;}

Código acima chama a autenticação através do método NTLM.É importante que o código que no início do script é incorporado como uma modificação do cabeçalho só é possível enquanto o script não enviará nenhuma outra informação sobre o cliente tem.

O script usa o recurso de “apache_request_headers”, ler os cabeçalhos atuais e verifica se um campo de cabeçalho de autorização está presente e começa com a sequência de caracteres “NTLM”. Este não é o caso, a autenticação é solicitada.

Na segunda etapa, que é executado depois que autenticou o cliente usando NTLM, o cliente lerá.

$headers [‘autorização’] = $auth; se (substr($auth,0,5) = = ‘NTLM’) {$msg = base64_decode (substr ($auth, 5)); if (substr ($msg, 0, 8)! = “NTLMSSP\x00”) que (‘erro cabeçalho não reconhecido’); if ($msg [8] = = “\x01”) {$msg2 = “NTLMSSP\x00\x02” “.”}} \x00\x00\x00\x00 “. “\x00\x00\x00\x00”. “\x01\x02\x81\x01”. “\x00\x00\x00\x00\x00\x00\x00\x00”. “\x00\x00\x00\x00\x00\x00\x00\x00”. “\x00\x00\x00\x00\x30\x00\x00\x00”; cabeçalho (‘ HTTP/1.1 401 não autorizado’); cabeçalho (‘WWW-authenticate: NTLM ‘.trim(base64_encode($MSG2)));) saída; } senão se (“\x03” = = $msg [8]) {função 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]); se ($unicode) retorno str_replace (‘ \0 ‘,’, substr ($msg, $off, $len)); outra}} retorno substr ($msg, $off, $len); } $user = get_msg_str ($msg, 36); $domain = get_msg_str ($msg, 28); $workstation = get_msg_str ($msg, 44); Imprimir “você está $user de $workstation. $domain”; }}

Após concluir o script, o nome do host de cliente do chamador de script ou do visitante site pode ser encontrado na variável “$workstation”.

Por último, gostaria de expressar meu especial graças a Loune, originou este blogpost sobre os resultados do seu trabalho.

Sobre o autor: Este artigo, bem como 363 outros artigos sobre código-bude.net, escrito por Raphael. -Desde 2011 blog aqui sobre programação, meu software, escrever tutoriais e tentar o meu conhecimento, portanto ele vai bem, para compartilhar com meus leitores. Além disso, escrevo sobre temas de meus estudos sobre derwirtschaftsinformatiker.de. E-mail • Google + • Facebook • Twitter

3SHARESFacebookTwitterGoogleWhatsappRedditPocketStumbleuponPinterestXingMail