簡體   English   中英

用PHP枚舉AD域

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM