0

目标是获取我的 Active Directory 服务器中所有计算机的“dn”属性。

当代码执行时,我得到:“000004DC:LdapErr:DSID-0C090752,注释:为了执行此操作,必须在连接上完成成功绑定。”

这是我的代码:

#!/usr/bin/perl

use strict;
use Net::LDAP;
use Data::Dumper;

my $ldap = Net::LDAP->new( 'my.domain.com' ) or die $@;
my $user = 'CN=username,OU=orgname,DC=my,DC=domain,DC=com';
my $pass = 'my_password';
$ldap->bind($user, password => $pass);
#$ldap->bind;

my $mesg = $ldap->search(
        base => "DC=my,DC=domain,DC=com",
        filter => "ObjectClass=Computers",
    attrs => "dn"
);

我已经测试了用户/密码直接登录域成功。如果我将其添加到脚本的末尾,则附加信息:print Dumper($mesg);

$VAR1 = bless( {
                 'parent' => bless( {
                                      'net_ldap_version' => 3,
                                      'net_ldap_scheme' => 'ldap',
                                      'net_ldap_debug' => 0,
                                      'net_ldap_socket' => bless( \*Symbol::GEN0, 'IO::Socket::INET' ),
                                      'net_ldap_host' => 'my.domain.com',
                                      'net_ldap_uri' => 'my.domain.com',
                                      'net_ldap_resp' => {},
                                      'net_ldap_mesg' => {},
                                      'net_ldap_async' => 0,
                                      'net_ldap_port' => 389,
                                      'net_ldap_refcnt' => 1
                                    }, 'Net::LDAP' ),
                 'errorMessage' => '000004DC: LdapErr: DSID-0C090752, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580',
                 'ctrl_hash' => undef,
                 'resultCode' => 1,
                 'callback' => undef,
                 'mesgid' => 2,
                 'matchedDN' => '',
                 'controls' => undef,
                 'raw' => undef
               }, 'Net::LDAP::Search' );

关于如何让这个脚本工作的任何建议都是我正在寻找的。谢谢!

4

1 回答 1

-1

关于您发布的错误消息,我会说bind尝试失败。它可能会帮助您改善bind结果:

$mesg = $_ldap->bind("***", password => "***");
$mesg->is_error && die join ';' $mesg->code, $mesg->error

请参阅网络::LDAP

这些方法的返回值是从 Net::LDAP::Message 类派生的对象。此类的方法允许您检查请求的状态。

于 2017-05-11T05:42:45.220 回答