2017-01-30 2 views
0

상황 :
내가 시도하고 도메인 컨트롤러에 연결을 확인하지만 모든 도메인 컨트롤러가 PHP를 실행하는 서버에서 액세스하는 도메인 이름 주소를 사용하고 있습니다. 그래서 도메인 컨트롤러가 fsockopen을 사용하여 응답 할 수 있는지 루프를 사용하고 있습니다.PHP는 fsockopen LDAP 도메인 검색

Domain.ad는 가능한 15 개의 도메인 컨트롤러를 가리 킵니다. 등 server.domain.ad, server2.domain.ad,

... 
$i = 0; 
do 
{ 
    $fp = fsockopen("domain.ad", 389, $errno, $errstr, 1); 
    $i++; 
} 
while(!$fp && $i < 15); 
... 
//$ip = $fp->getAddress(); or something like that. 

질문 :
그것과 연결 성공 어떤 IP 주소/도메인 컨트롤러의는 fsockopen 연결에서 찾을 수있는 방법이 있나요 나중에 LDAP 바인드를 완료하기 위해 코드에서 사용 하시겠습니까? 또는 1 개의 도메인 컨트롤러를 사용하지 않고이 작업을 수행하는 더 좋은 방법이 있습니까?

답변

0

내 도메인 컨트롤러를 통한 반복 솔루션.

$ipDomain = dns_get_record("domain.ad", DNS_A); 
$i = 0; 
do 
{ 
    $fp = fsockopen($ipDomain[$i]['ip'], 389, $errno, $errstr, 1); 
    if(!$fp) 
    { 
     $i++; 
     if($i >= sizeof($ipDomain)) 
     { 
      break; 
      //die(); 
     } 
    } 
} 
while(!$fp); 
... 
ldap_connect($ipDomain[$i]['ip']); 
... 
0

나는 당신이 거기에서 성취하려는 것을 확신하지 못합니다. fsockopen은 주어진 포트에서 주어진 서버에 대한 연결을 시도합니다. 또한 시간 초과를 설정하고 있습니다. 그러나 당신은 그것을 반복합니다. 따라서 연속해서 15 번 연결을 시도하고 각 실행마다 1 초씩 서버에 대한 시간 초과를 늘리려고합니다. 하지만 내가 읽은 바에 따르면 여러 개의 도메인 컨트롤러를 사용할 수 있습니다. 네트워크 설정에 따라 사용 가능한 첫 번째 응답은 "사용자"엔드 포인트 역할을합니다. 해당 시스템의 사용자는 도달 할 수있는 대상과 도달 할 수없는 대상을 확인할 필요가 없습니다. ldap_connect('ldap://domain.ad:389);을 할 때 핸들을 다시 가져와야합니다.

또는 주어진 호스트의 IP 주소를 알려주는 gethostbyname('domain.ad')을 통해 도메인 컨트롤러에 대한 DNS 쿼리를 수행 할 수 있습니다. 그러나 내가 말했듯이 네트워크가 적절히 유지 관리 될 필요가 없어야합니다.

당신은 당신이이 같은 ldap_connect에 매개 변수로 공백으로 구분 된 목록에서 사용할 수 더 서버 이름 하나 이상이있을 때 :

ldap_connect('ldap://domain.ad:389 ldap://domain2.ad:389 ldaps://domain.ad:123'); 

사용 가능한 첫 번째 서버에 연결해야한다고.

ldap_connect이 아닌이주의해야합니다. 연결은 보통 ldap_bind에 먼저 열립니다! 따라서 연결 문제는 이 아니며 ldap_connect 표면이 있습니다. 다시 false을 가져와야합니다. 단순히 제공된 매개 변수가 기대에 미치지 못한다는 의미입니다. 그래서 저는 보통 fsockopen을 먼저 사용하여 서버를 사용할 수 있는지 확인하여 문제가 될 수 있으므로 빨리 실패 할 수 있습니다.

+0

domain.ad는 15 개의 가능한 도메인 컨트롤러입니다. – thebtm

+1

"domain.ad"에 15 개의 CNAME 또는 15 개의 A 레코드가 있습니까? DNS는 컴퓨터에서 액세스 할 수있는 서버 만 반환해야합니다. 또는 DNS 쿼리를 수행하여 모든 A 레코드를 찾아 루프하여 액세스 가능한 레코드를 찾으십시오. – heiglandreas

+0

그것은 실제로 내가 어제 오후했으면 좋겠다. – thebtm