0

我正在使用 Windows 附带的 WinLDAP.DLL 连接到不同的 LDAP 服务器(1x OpenLDAP,1x Active Directory)。编程语言是 Delphi,但在这里可能不相关。

在几个配置中,当使用服务器名称而不是 IP 地址时,“ldap_connect”的调用非常慢(6-7 秒)。ping 或对同一台服务器进行 nslookup 并不慢。为什么只有 ldap 连接很慢?有什么我可以检查以确定问题的地方吗?

编辑:WMware 在我的电脑上安装了 2 个虚拟以太网适配器。如果我停用这些适配器,ldap_connect 会快 2-3 倍。它并不能完全解决问题,但它可能有助于找到解释。

4

3 回答 3

1

这几乎可以肯定是 DNS 配置错误。检查您的 nslookup 和反向查找时间。

于 2012-12-10T11:52:58.843 回答
1

LDAP 服务器执行反向 DNS 查找的机会很大。

于 2012-12-10T15:52:24.560 回答
0

我仍然不知道,如果我使用服务器名称而不是 IP 地址,为什么连接会很慢。但是为了解决这个问题,我决定自己解决 IP 地址,而不是让 WINLDAP.dll 来解决。

它可以通过使用这样的函数来简单地实现:

function GetIPAddress(const HostName: AnsiString): AnsiString;
var
  HostEnt: PHostEnt;
  Host: AnsiString;
  SockAddr: TSockAddrIn;
begin
  Result := '';
  Host := HostName;
  if Host = '' then
  begin
    SetLength(Host, MAX_PATH);
    GetHostName(PAnsiChar(Host), MAX_PATH);
  end;
  HostEnt := GetHostByName(PAnsiChar(Host));
  if HostEnt <> nil then
  begin
    SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
    Result := inet_ntoa(SockAddr.sin_addr);
  end;
end;
于 2013-04-22T09:02:15.780 回答