Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环IP选择中LDAP主机的当前IP_Php_Ldap - Fatal编程技术网

Php 循环IP选择中LDAP主机的当前IP

Php 循环IP选择中LDAP主机的当前IP,php,ldap,Php,Ldap,我有一个LDAP服务器(例如ldaps://abc.example.com). 我在PHP中使用@ldap_connect()函数和程序来获得与ldap的连接。此主机配置了多个IP,并以循环方式使用它们。那么,有没有什么方法可以让我从这些ip中获取当前与其连接的ip 代码: $host=”ldaps://abc.example.com"; $binddn=“cn=user,ou=My Accounts,ou=TestUsers,ou=testsystem access,dc=abc,dc=exa

我有一个LDAP服务器(例如ldaps://abc.example.com). 我在PHP中使用@ldap_connect()函数和程序来获得与ldap的连接。此主机配置了多个IP,并以循环方式使用它们。那么,有没有什么方法可以让我从这些ip中获取当前与其连接的ip

代码:

$host=”ldaps://abc.example.com";
$binddn=“cn=user,ou=My Accounts,ou=TestUsers,ou=testsystem access,dc=abc,dc=example,dc=com”;
$password=“xyz”
对于($i=0;$i<3;$i++)
{
$conn=@ldap\u connect($host);
如果(!$conn)
{
睡眠(1);
继续;
}
echo“已连接到$host(我的尝试计数为$i):”;
打印(康涅狄格州,真实);
@ldap_设置_选项($conn,ldap_选项_协议_版本,3);
@ldap\u set\u选项($conn,ldap\u OPT\u references,0);
echo“绑定到$host(我的尝试计数为$i)”;
$Resource=@ldap\u bind($conn、$binddn、$password);
如果有($资源)
{
打破
}
echo“绑定到$host的AD失败(我的尝试计数为$i):”。trim(@ldap\u error($conn);
@ldap_close($conn);
睡眠(1);
}

由于您将只连接到同一个
记录,您可以使用
gethostbyname()
函数为您提供所连接服务器的IP。然后使用
gethostbyaddr()
执行反向查找(IP到主机名)获取
PTR
记录。分配给
gethostbyaddr()
的这个变量将是进行LDAP查询时使用的主机名,因为从技术上讲,您不是在查询
A
记录,而是绕过循环的IP地址

$ip = gethostbyname('www.google.com'); //Get the ip via hostname (Given IP from Round Robin)
$address = gethostbyaddr($ip); // Convert the IP to Hostname using reverse lookup/ PTR Lookup

echo $address; //Use this for your LDAP query
在我上面的例子中,Google的
PTR
记录(反向查找记录)与
a
记录不同,因此在本例中,结果与我最初查询的
www
不同,并显示主机名为lhr35s01-In-f4.1e100.net。如果你控制你的DNS(我猜你是这样做的),您可以创建与
a
记录匹配的
PTR
记录,以便正确解析反向查找

输出:

lhr35s01-in-f4.1e100.net 
见:


由于您将只连接到相同的
A
记录,您可以使用
gethostbyname()
函数为您提供所连接服务器的IP。然后使用
gethostbyaddr()
执行反向查找(IP到主机名)获取
PTR
记录。分配给
gethostbyaddr()
的这个变量将是进行LDAP查询时使用的主机名,因为从技术上讲,您不是在查询
A
记录,而是绕过循环的IP地址

$ip = gethostbyname('www.google.com'); //Get the ip via hostname (Given IP from Round Robin)
$address = gethostbyaddr($ip); // Convert the IP to Hostname using reverse lookup/ PTR Lookup

echo $address; //Use this for your LDAP query
在我上面的例子中,Google的
PTR
记录(反向查找记录)与
a
记录不同,因此在本例中,结果与我最初查询的
www
不同,并显示主机名为lhr35s01-In-f4.1e100.net。如果你控制你的DNS(我猜你是这样做的),您可以创建与
a
记录匹配的
PTR
记录,以便正确解析反向查找

输出:

lhr35s01-in-f4.1e100.net 
见:


如果您真的想知道要连接到哪台服务器,我的解决方案是扭转局面

$dclist = gethostbynamel($host); // will get the list of IPs in round robin fashion (order changes)

$host = $dc[0]; // will contain different IP

// now you can connect to $host while knowing the IP...

(这可能不适用于ssl tho..很抱歉,我刚才注意到您确实使用ldaps进行连接…

如果您确实想知道要连接到哪个服务器,我的解决方案是扭转局面

$dclist = gethostbynamel($host); // will get the list of IPs in round robin fashion (order changes)

$host = $dc[0]; // will contain different IP

// now you can connect to $host while knowing the IP...

(这可能不适用于ssl tho..很抱歉,我刚才注意到您使用ldaps进行连接…)

欢迎使用Stack Overflow!您可以先学习并创建一个示例。我们将更容易帮助您。我编辑了您的代码。请考虑下一次缩进。欢迎使用Stack Overflow!您可以先学习并创建一个示例。我们将更容易帮助您。我编辑了您的代码。请考虑缩进感谢Kitson的回复。函数是从ips列表中获取ip的,它是从@ldap_connect()单独调用的,我们使用循环方式在调用时提供ip,因此两个函数在调用期间获取不同ip的可能性都很高。gethostbyname()函数从ips列表获取ip,并从@ldap_connect()单独调用,我们使用循环方式提供呼叫时ip,因此这两种功能在呼叫期间获得不同ip的可能性都很高。您可以先通过主机名查询ip,然后执行反向查找以获得真实的主机名,因为循环方式仅在查询主机名时提供ip,而在调用特定ip时不提供ip。Thanks Kitson for replygethostbyname()函数从ips列表获取ip,并从@ldap_connect()单独调用,我们使用循环方式提供调用时的ip,因此两个函数在调用期间获取不同ip的可能性都很高。gethostbyname()函数从ips列表获取ip,并从@ldap_connect()单独调用(),我们使用循环方式在呼叫时提供ip,因此这两种功能在呼叫期间获得不同ip的可能性都很高。您可以先通过主机名查询ip,然后执行反向查找以获得真实的主机名,因为循环方式仅在查询主机名时提供ip,而在调用特定ip时不提供ip。