HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #3  
Старый 30.07.2009, 00:47
BlackSun
Members of Antichat - Level 5
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме:
10046345

Репутация: 4589


По умолчанию

ActiveDirectory.php
PHP код:
<?php
    
/**
     * Simple class for working with LDAP
     * by BlackSun [S.T.A.R.S. Team]
     * 
     * PS: не проверял, может где то накосячил ..
     */
    
class ActiveDirectory
    
{
        protected 
$ldap;
        protected 
$bind;
        protected 
$base_dn;
        protected 
$ldap_username;
        protected 
$ldap_password;
        public 
$use_ssl;
        public 
$use_protocol_v3;
        public 
$ldap_host;
        public 
$ldap_port;
        
        
/**
         * Инициализация
         *
         * @param string $host
         * // важно правильно задать этот параметр, иначе нифига пахать не будет
         * @param string $base_dn
         * @param string $username
         * @param string $password
         * @param int $port default = 389
         * @param BOOL $use_ssl default = False
         * @param BOOL $protocol_v3 default = True
         */
        
public function __construct($host$base_dn$username$password$port 389$use_ssl False$protocol_v3 True)
        {
            
/**
             * инициализируем переменные
             */
            
define ('ADLDAP_NORMAL_ACCOUNT'805306368);
            
            
$this->base_dn $base_dn;
            
$this->ldap_username $username;
            
$this->ldap_password $password;
            
$this->ldap_host $host;
            
$this->ldap_port $port;
            
$this->use_ssl $use_ssl;
            
$this->use_protocol_v3 $protocol_v3;
            
            if (
$use_ssl)
            {
                
$this->ldap_host 'ldaps://' $this->ldap_host;
            }
            
            
/**
             * соеденяемся
             */
            
$this->ldap ldap_connect($this->ldap_host$this->ldap_port);
            if (!
$this->ldap)
            {
                die(
'Can\'t connect to Active Directory :(<br />' 'LDAP Error: ' ldap_error($this->ldap));
            }
            
            
/**
             * выставляем необходимые опции
             */
            
if ($protocol_v3)
            {
                
ldap_set_option($this->ldapLDAP_OPT_PROTOCOL_VERSION3);
            }
            
// ldap_set_option($this->_conn, LDAP_OPT_REFERRALS, 0);
            
            /**
             * биндимся
             */
            
$this->bind ldap_bind($this->ldap$this->ldap_username$this->ldap_password);
            if (!
$this->bind)
            {
                if (
$this->use_ssl)
                {
                    die(
'Error: AD bind failed. Try with no SSL.<br /> LDAP Says: ' ldap_error($this->ldap));
                } else {
                    die(
'Error: AD bind failed. Try to use SSL.<br /> LDAP Says: ' ldap_error($this->ldap));
                }
            }
            
            return 
True;
        }
        
        public function 
__destruct()
        {
            
ldap_close($this->ldap);
        }
        
        
/**
         * функция выдачи списка юзверей
         *
         * @param array $fields
         * @param string $search
         * @return Array or False
         * 
         * возвращает массив:
         *         array {
         *             count => кол-во найденых юзверей
         *             result => array {
         *                     id => array {
         *                             field => value
         *                         }
         *                 }
         *         }
         * 
         * Example:
         *         // Иванов Федор Пупович
         *         echo $result['result'][0]['displayname'];
         */
        
public function GetUsersList($fields = array('displayname'), $search '*')
        {
            
$filter '(&(objectClass=user)(samaccounttype=' ADLDAP_NORMAL_ACCOUNT ")(objectCategory=person)(cn=$search))";
            
$ldap_search ldap_search($this->ldap$this->base_dn$filter$fields);
            if (!
$ldap_search)
            {
                echo 
'LDAP Search error. LDAP Says: ' ldap_error($this->ldap);
                return 
False;
            }
            
            
$entries ldap_get_entries($this->ldap$ldap_search);
            
$users_array = array();
            
$count ldap_count_entries($this->ldap$ldap_search);
            
$result = array('count' => $count'result' => array());
            if (
$count 0)
            {
                for (
$i 0$i $count$i++)
                {
                    foreach (
$fields as $field)
                    {
                        
$result['result'][$i][$field] = $entries[$i][$field][0];
                    }
                }
            }
            
            return 
$result;
        }
    }
?>
index.php
PHP код:
<?php
    
require ('ActiveDirectory.php');
    
    
// насчет dc в base_dn что то я сомневаюсь, может все же не uni-protvino, а uni-protvino.ru ?
    // и создайте нового юзера с правами на чтение, у меня с анонимусом были проблемы
    
$ldap = new ActiveDirectory('backup.uni-protvino.ru''ou=Users,dc=uni-protvino,dc=ru',
            
'adUserReadOnly''adUserPassword');
    
$users $ldap->GetUsersList(array('displayname'), '*');
    
    if (
$users)
    {
        echo 
'Count: ' $users['count'] . '<br /><pre>';
        
print_r($users);
        echo 
'</pre>';
    }
?>
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто куда поступает? (или если учится, то где) TTyck Болталка 19 16.04.2009 19:32
Интернет-блоги стали новым полезным источником информации для ЦРУ. Allen Мировые новости. Обсуждения. 3 21.04.2006 19:16
Защита информации против защиты данных dinar_007 Мировые новости. Обсуждения. 0 26.02.2006 20:02



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ