Саратов + 26 °C 

Храмы Высота ЧБ Люди Вокзалы Парк Зима. Снег Саратов Сад-огород. Хлеба Грибы Лес Зима. Снег Цветы Живность Кошки Река Хлеба Лес Зима. Снег Новый Год Небо. Облака Радуга Курьезы Река Хлеба Лес Зима. Снег Небо. Облака Курьезы Астро Зима. Снег Новый Год Шарм Эль Шейх. Тропикана Гранд Азур Кошки Ящерица Йошкар-Ола. Казань. Чебоксары Гуамское ущелье Майкоп Грибы Зима. Снег Лошади Сад-огород. Зима. Снег Должанка Египет Люди Санкт-Петербург Санкт-Петербург Финляндия Финляндия Греция. Родос. Детский Сад 158 Новый Год Авто Мото Макро Карта Дети Питание Шарм Эль Шейх. Тропикана Гранд Азур Астро Набережная Петрозаводска Карелия. Путешествия. Весна Макро Карта Отдых Лыжные прогулки Стихи CentOS Oracle SAMBA GlassFish LAMP Motion EJabberd Postfix. Dovecot. Amavisd Perl Jabber VLC M3U Ubuntu
Обои для рабочего стола. Лучшее качество 1600x1200.
ДНЕВНИКИ


Назад >> Сергей ШИБКА >> Perl


23.03.2014 Active Directory и Perl

Подключение к домену на базе Win2008R2 AD из Perl.

Есть домен на базе Win2008R2 AD, его имя developer.com, IP адрес 192.168.101.2, необходимо получить список пользователей для дальнейшей обработки.

#!/usr/bin/perl

use Encode;
use locale;
use Net::LDAP;

print "Content-type: text/html \n\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">";

my $dc = '192.168.101.2';
my $user = 'deleguser@developer.com';
my $passwd = '1234567890';

my $basedn = 'dc=developer,dc=com';
my $scope = 'sub';
my $filter1 = '(&(objectClass=*) (samAccountName=ivar))';
my $filter2 = '(&(sAMAccountName=*) (sAMAccountType=805306368))';

### Подключение и авторизация в домене. Включен вывод на экран о
### состоянии и ошибках при подключении. Если всё нормально,
### вывод будет: 0 Success
my $ad = Net::LDAP->new($dc, version => 3) or die print "$@";
$mesg = $ad->bind($user, password=>$passwd) or die print "$@";
$C = $mesg->code;
$E = $mesg->error;
print "$C $E<br><br>";
###

### Производим поиск и подсчет по заданным параметрам фильтра.
### Включен вывод на экран о состоянии и ошибках при выборке
### фильтром. Если всё нормально, вывод будет: 0 Success
$searchobj = $ad->search(base => $basedn, scope=>$scope, filter => $filter2);
$C = $searchobj->code();
$E = $searchobj->error();
print "$C $E<br><br>";
my $count = $searchobj->count;
print "$count<br><br>";
###

### Вывод всех записей из AD. Необходим при отладке, чтобы знать
### названия параметров для создания фильтра. Для включения
### убираем знак # у строки #&DUMP; и в поиске
### меняем фильтр $filter2 на $filter1
sub DUMP {
foreach $entry ($searchobj->entries) { # Вывод всех записей из AD
$result = $entry->dump;
print "$result<br><br>";
}
}
#&DUMP;
###

### Перебираем полученный при поиске массив. Выводим из него нужные
### нам значения sn и givenName (имена и фамилии). Т.к. Все значения
### хранятся в utf8 я для своего удобства конвертирую в cp1251
### и кидаю в отдельный массив
foreach $entry ($searchobj->entries){
$name = $entry->get_value('sn');
$fname = $entry->get_value('givenName');
if ($name ne '' && $fname ne ''){
$User_AD = "$fname $name";
$User_AD = encode("cp1251", decode("utf8", $User_AD));
push (@ADU, $User_AD);
}
}
###

### Вывод готового списка пользователей из домена с сортировкой
### по алфавиту
foreach $adu (sort @ADU){
$cnt++;
print "$cnt # $adu<br>";
}
###
print "<br><br>end";
$ad->unbind;

# $dc IP адрес сервера
# $user Имя пользователя домена
# $passwd Пароль
# $basedn Имя домена
# $filter1 Фильтр для выборки всех записей пользователя ivar из домена
# $filter2 Фильтр для выборки всех записей пользователей из домена



Полученный результат будет иметь вид (обрезанный вывод списка):

0 Success

0 Success

397

1 # Bars E-178B
2 # EJabberd Server
3 # Kaskad 1C
4 # Kaspersky Security Center
5 # Konsultant Server



комментарии (0)


[ Назад ]


© 2005 - 2018 * Сергей Шибка