[英]Enumerating AD domains with PHP
我們有一個域,其中附加了80多個其他“受信任”域。 這意味着我們的某些組與一個域中的用戶,另一個域中的組等相互鏈接。我編寫了一個腳本,該腳本創建了一個域中特定組的用戶列表,但其中一些它們來自其他域,所以我只獲得了外國標識符。 我需要將其鏈接到其他域,但是我需要每個域的SID。
是否有PHP等同於Win32的DsEnumerateDomainTrusts ? 我不想手動寫出所有SID,然后在添加新域或刪除舊域時繼續手動更新它們。
您可以在域的“系統”容器中對TrustedDomain對象執行LDAP查詢。 對我來說,域的sid在securityIdentifier
屬性中。
這是我的解決方案:
function ldap_sidconvert($ldapbytes)
{
$d_proc=unpack("H*",$ldapbytes);
$d_proc['hex1']=str_split(substr($d_proc[1],-24),2);
foreach ($d_proc['hex1'] as $key=>$value)
{
$d_proc['hex2'][floor($key/4)][]=$value;
}
foreach ($d_proc['hex2'] as $key=>$value)
{
$d_proc['hex3'][$key]=hexdec(implode(array_reverse($d_proc['hex2'][$key],FALSE)));
}
return implode("-",$d_proc['hex3']);
}
然后可以通過將securityidentifier字段的值傳遞給它來調用它:
ldap_sidconvert($domains[0]['securityidentifier'][0])
在此示例中,它只是查看列表中的第一個域,根據需要將第一個0替換為1,2,3 ...等。 這只會轉換最后的24個十六進制數字,我不確定如何處理前24個十六進制數字,但是我相信它們也不是唯一的,因此不需要。
這可能不是最好的方法,所以我很樂意接受對我的編碼的批評,但是希望它將對將來的人有所幫助。
這可能是有用的參考: http : //en.wikipedia.org/wiki/Security_Identifier#Machine_SIDs
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.