2017-01-30 9 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クエリを実行することもできます。しかし、私が言ったように、あなたのネットワークが適切に維持されているときは、その必要はないはずです。

あなたは1台のサーバー名あなたはこのような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

関連する問題