Carpire il nome utente con PHP e Apache

Ciao a tutti.

Lavorando in un ambiente in cui sono in rete più di 50 pc avrei bisogno di prendere il "nome utente" dell'utente che si connette al sito dell'intranet.

Sono tutti pc con installato Windows2000professional.

Ho visto e sperimentato che su un pc con installato IIS è possibile in una pagina php inserire il seguente codice

<?php
echo "$LOGON_USER";
?>

L'utente che si collegherà a questa pagina vedrà comparire a video la scritta

\\nome_dominio\pippo dove pippo è il nome di login che va ad inserire insieme alla password al momento del logon nella sua postazione.

E' possibile ottenere qualcosa di simile con un pc su cui è installato un server web Apache2.0?

ho provato a cercare su internet, ma non ho trovato nulla.

Esiste un modo?

Vi ringrazio

Un saluto a tutti    :bye:

Mario

inviato 11 anni fa
stone
modificato 11 anni fa
X 0 X

La variabile $LOGON_USER, o meglio $_SERVER["LOGON_USER"] è disponibile solo con IIS poiché si basa su NTLM, un protocollo di autenticazione non supportato nativamente da Apache

Esiste però un modulo per Apache, ancora in fase beta e non più aggiornato dal 2003, che implementa tale protocollo.

Lo puoi trovare qui:

http://sourceforge.net/projects/modntlm/

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Grazie della info.

Cercherò in rete come aggiungere questo modulo.

La vedo un po' dura, speriamo bene.

A presto!

Mario :)

risposto 11 anni fa
stone
X 0 X

Ciao Gianni.

Ritorno su questo mio vecchio post.

Ho provato a vedere il modulo per Apache ma è per Apache installato su Linux.

Girovagando per la rete ho trovato questa classe php di cui posto il contenuto:

<?php
/*
 * ntlm_sasl_client.php
 *
 * @(#) $Id: ntlm_sasl_client.php,v 1.3 2004/11/17 08:00:37 mlemos Exp $
 *
 */

define("SASL_NTLM_STATE_START",             0);
define("SASL_NTLM_STATE_IDENTIFY_DOMAIN",   1);
define("SASL_NTLM_STATE_RESPOND_CHALLENGE", 2);
define("SASL_NTLM_STATE_DONE",              3);

class ntlm_sasl_client_class
{
   var $credentials=array();
   var $state=SASL_NTLM_STATE_START;

   Function Initialize(&$client)
   {
      if(!function_exists($function="mcrypt_encrypt")
      || !function_exists($function="mhash"))
      {
         $extensions=array(
            "mcrypt_encrypt"=>"mcrypt",
            "mhash"=>"mhash"
         );
         $client->error="the extension ".$extensions[$function]." required by the NTLM SASL client class is not available in this PHP configuration";
         return(0);
      }
      return(1);
   }

   Function ASCIIToUnicode($ascii)
   {
      for($unicode="",$a=0;$a<strlen($ascii);$a++)
         $unicode.=substr($ascii,$a,1).chr(0);
      return($unicode);
   }

   Function TypeMsg1($domain,$workstation)
   {
      $domain_length=strlen($domain);
      $workstation_length=strlen($workstation);
      $workstation_offset=32;
      $domain_offset=$workstation_offset+$workstation_length;
      return(
         "NTLMSSP\0".
         "\x01\x00\x00\x00".
         "\x07\x32\x00\x00".
         pack("v",$domain_length).
         pack("v",$domain_length).
         pack("V",$domain_offset).
         pack("v",$workstation_length).
         pack("v",$workstation_length).
         pack("V",$workstation_offset).
         $workstation.
         $domain
      );
   }

   Function NTLMResponse($challenge,$password)
   {
      $unicode=$this->ASCIIToUnicode($password);
      $md4=mhash(MHASH_MD4,$unicode);
      $padded=$md4.str_repeat(chr(0),21-strlen($md4));
      $iv_size=mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB);
      $iv=mcrypt_create_iv($iv_size,MCRYPT_RAND);
      for($response="",$third=0;$third<21;$third+=7)
      {
         for($packed="",$p=$third;$p<$third+7;$p++)
            $packed.=str_pad(decbin(ord(substr($padded,$p,1))),8,"0",STR_PAD_LEFT);
         for($key="",$p=0;$p<strlen($packed);$p+=7)
         {
            $s=substr($packed,$p,7);
            $b=$s.((substr_count($s,"1") % 2) ? "0" : "1");
            $key.=chr(bindec($b));
         }
         $ciphertext=mcrypt_encrypt(MCRYPT_DES,$key,$challenge,MCRYPT_MODE_ECB,$iv);
         $response.=$ciphertext;
      }
      return $response;
   }

   Function TypeMsg3($ntlm_response,$user,$domain,$workstation)
   {
      $domain_unicode=$this->ASCIIToUnicode($domain);
      $domain_length=strlen($domain_unicode);
      $domain_offset=64;
      $user_unicode=$this->ASCIIToUnicode($user);
      $user_length=strlen($user_unicode);
      $user_offset=$domain_offset+$domain_length;
      $workstation_unicode=$this->ASCIIToUnicode($workstation);
      $workstation_length=strlen($workstation_unicode);
      $workstation_offset=$user_offset+$user_length;
      $lm="";
      $lm_length=strlen($lm);
      $lm_offset=$workstation_offset+$workstation_length;
      $ntlm=$ntlm_response;
      $ntlm_length=strlen($ntlm);
      $ntlm_offset=$lm_offset+$lm_length;
      $session="";
      $session_length=strlen($session);
      $session_offset=$ntlm_offset+$ntlm_length;
      return(
         "NTLMSSP\0".
         "\x03\x00\x00\x00".
         pack("v",$lm_length).
         pack("v",$lm_length).
         pack("V",$lm_offset).
         pack("v",$ntlm_length).
         pack("v",$ntlm_length).
         pack("V",$ntlm_offset).
         pack("v",$domain_length).
         pack("v",$domain_length).
         pack("V",$domain_offset).
         pack("v",$user_length).
         pack("v",$user_length).
         pack("V",$user_offset).
         pack("v",$workstation_length).
         pack("v",$workstation_length).
         pack("V",$workstation_offset).
         pack("v",$session_length).
         pack("v",$session_length).
         pack("V",$session_offset).
         "\x01\x02\x00\x00".
         $domain_unicode.
         $user_unicode.
         $workstation_unicode.
         $lm.
         $ntlm
      );
   }

   Function Start(&$client, &$message, &$interactions)
   {
      if($this->state!=SASL_NTLM_STATE_START)
      {
         $client->error="NTLM authentication state is not at the start";
         return(SASL_FAIL);
      }
      $this->credentials=array(
         "user"=>"",
         "password"=>"",
         "realm"=>"",
         "workstation"=>""
      );
      $defaults=array();
      $status=$client->GetCredentials($this->credentials,$defaults,$interactions);
      if($status==SASL_CONTINUE)
         $this->state=SASL_NTLM_STATE_IDENTIFY_DOMAIN;
      Unset($message);
      return($status);
   }

   Function Step(&$client, $response, &$message, &$interactions)
   {
      switch($this->state)
      {
         case SASL_NTLM_STATE_IDENTIFY_DOMAIN:
            $message=$this->TypeMsg1($this->credentials["realm"],$this->credentials["workstation"]);
            $this->state=SASL_NTLM_STATE_RESPOND_CHALLENGE;
            break;
         case SASL_NTLM_STATE_RESPOND_CHALLENGE:
            $ntlm_response=$this->NTLMResponse(substr($response,24,8),$this->credentials["password"]);
            $message=$this->TypeMsg3($ntlm_response,$this->credentials["user"],$this->credentials["realm"],$this->credentials["workstation"]);
            $this->state=SASL_NTLM_STATE_DONE;
            break;
         case SASL_NTLM_STATE_DONE:
            $client->error="NTLM authentication was finished without success";
            return(SASL_FAIL);
         default:
            $client->error="invalid NTLM authentication step state";
            return(SASL_FAIL);
      }
      return(SASL_CONTINUE);
   }
};

?>

Lavoro su una postazione Windows 2000 Professional con instalalto, come da tuo mitico tutorial, Apache2, PHP5.0 e MySQL4.1 con Mysqli abilitate.

Purtroppo non sono molto ferrato nell'utilizzo delle classi php, mi barcameno nell'utilizzo del codice ma non sono a livelli eccelsi.

Ho trovato questa classe su http://www.phpclasses.org

Ma dove devo inserire questo file? In teoria dovrei avere la possibilità di vedere stampato a video lo suername dell'utente del pc che si collega tramite browser alla pagina in questione, sulla falsariga di

<?php
echo $_SERVER["LOGON_USER"];
?>

help me ...

 :-[

Mario

risposto 11 anni fa
stone
X 0 X

riporta il link da cui hai preso la classe, normalmente su phpclasses si trova sempre un esempio di utilizzo

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
risposto 11 anni fa
stone
X 0 X

Mi sa che questa classe non fa al caso tuo, serve per autenticarsi:

Provide a common interface to plug-in driver classes that implement different mechanisms for authentication used by clients of standard protocols like SMTP, POP3, IMAP, HTTP, etc.. Currently the supported authentication mechanisms are: PLAIN, LOGIN, CRAM-MD5, Digest and NTML (Windows or Samba).

 :dunno:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Sigh sob, non c'ho capito nulla ...  :idiot:

Grazie comunque.

Speriamo che in futuro ci sia una versione Apache che riconosca i protocollo ntlm

Ciao

Mario

 :bye:

risposto 11 anni fa
stone
X 0 X

SAlve ragazzi, siccome non mi lasciano creare una domanda nuova, scrivo qui visto che è quello che mi serve.

Potete darmi lo script in PHP che recupera l'username e lo scrive in un txt? in pratica un username grabber??

Grazie a tutti coloro che risponderanno, se non potete rispondere qui, rispondete alla mail: dnroby@libero.it

Grazie mille!

risposto 3 anni fa
dnroby
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda