我將從LDAP服務器檢索用戶信息。客戶給我發了以下3個數據:是否可以用Perl顯示ldap文件夾結構?
- LDAP服務器IP
- 用戶名來驗證
- 密碼來驗證
這是第一時間我與LDAP工作,所以我研究了它。我看到我必須使用像cn,dc,ou這樣的參數。客戶不應該提供這些信息嗎?或客戶的信息是足夠的,我可以通過顯示文件夾結構的代碼找到這些參數?
我將從LDAP服務器檢索用戶信息。客戶給我發了以下3個數據:是否可以用Perl顯示ldap文件夾結構?
這是第一時間我與LDAP工作,所以我研究了它。我看到我必須使用像cn,dc,ou這樣的參數。客戶不應該提供這些信息嗎?或客戶的信息是足夠的,我可以通過顯示文件夾結構的代碼找到這些參數?
您要查看的結構稱爲目錄樹,由LDAP「條目」(不是文件夾)組成。
您應該能夠從您的目錄中收集條目,前提是您提供的憑據足夠。爲此,您需要一個客戶端庫,您可以使用Perl LDAP。
使用該庫,你會做這樣的事情:
use Net::LDAP;
# Init connection and bind to the directory.
$ldap = Net::LDAP->new('ldaphost.example.com') or die "[email protected]";
$mesg = $ldap->bind ($binddn, password => $password);
# Perform a search on the whole tree below (and including) the base object.
$mesg = $ldap->search(base => $basedn);
# Handle error
$mesg->code && die $mesg->error;
# Display results
foreach $entry ($mesg->entries) { $entry->dump; }
$mesg = $ldap->unbind;
上面的代碼只是打印入口到標準輸出($入門>轉儲)。
$binddn
是dn進行身份驗證。如果你有一個簡單的用戶名不是DN,比如'username'而不是像uid=username,dc=example,dc=com
這樣的名字,這可能意味着你正在處理Active Directory。在這種情況下,您可以嘗試使用與以下模式對應的binddn進行綁定:'[email protected]'
。basedn
是基礎對象條目的dn,搜索在基礎對象下面的整個樹上執行(並且包括)。你將不得不指定一個有效的基地DN。您可以嘗試猜測使用哪個基準dn。域組件(dc)通常與FQDN匹配,但不能保證它會生成有效的基本dn(例如,'ldaphost.example.com'
將給出'dc=example,dc=com'
)。但是,您可以查詢的RootDSE信息的服務器和檢索namingContexts
(或defaultNamingContext
如果有的話),並使用其中之一作爲基準DN:
$ldap->search(base => '', attrs => 'namingContexts');
這就是說,如果你真的想顯示的目錄樹,你最好使用LDAP Explorer,如Apache Directory Studio。
請注意,LDAP不限於以嚴格的「樹」結構存儲信息,它只需要遵守目錄信息樹(DIT)命名法。
它是什麼類型的目錄?提供的用戶名是什麼樣的? – EricLavault
我將檢索用戶信息。我不知道任何其他信息。我的問題是,我是否必須向客戶詢問這個問題,或者有什麼方法可以查看LDAP服務器的目錄層次結構 –
如果您不熟悉LDAP,最好知道需要處理的目錄類型。 。一旦你設法閱讀一些條目,你可以猜出它。您是否設法綁定並執行搜索? – EricLavault