Esempio n. 1
0
    def __get_groups__(self):
        """
            Renvoie un dictionnaire des groupes du serveur avec, pour chacun, la liste de ses membres et
            le descriptif.
            N.B. On met tous les noms en minuscules pour ne pas être emmerdé quand on voudra faire
            "if nom in liste"
        """
        groups_list = {}
        resume = 0
        Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume,
                                                   4096)
        while 1:
            for Champ in Enr:
                group_name = Champ['name'].lower()
                group_comment = Champ['comment']

                # members_list = self.__get_group_members__(group_name)
                users_list = [
                    e[0] for e in self.__get_group_members__(group_name, True)
                ]
                members_list = [
                    e for e in self.__get_group_members__(group_name, False)
                ]
                groups_list[group_name] = [
                    users_list, group_comment, members_list
                ]

            if resume <= 0:
                break

            Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume,
                                                       4096)
        """
            Cet abruti de microsoft s'obstine à utiliser des alias pour certains noms ("c:/Utilisateurs" par exemple
            qui est en réalité c:/Users"...).
            C'est ainsi que le groupe "domain users" est parfois traduit par "utilisateurs".
            Pour pas être emmerdés on ajoute artificiellement ces noms à la con. (fruit de l'expérience ! Et c'est
            certainement pas fini. À adapter aussi en fonction de la langue)
        """
        try:
            groups_list['administrateurs'] = groups_list['domain admins']
        except:
            pass

        try:
            groups_list['administrators'] = groups_list['domain admins']
        except:
            pass

        try:
            groups_list['utilisateurs'] = groups_list['domain users']
        except:
            pass

        try:
            groups_list['users'] = groups_list['domain users']
        except:
            pass

        return groups_list
Esempio n. 2
0
 def testGroupsGoodResume(self, server=None):
     res = 0
     level = 0  # setting it to 1 will provide more detailed info
     while True:
         (user_list, total, res) = win32net.NetGroupEnum(server, level, res)
         for i in user_list:
             pass
         if not res:
             break
Esempio n. 3
0
    def __get_groups_names__(self):
        """
            Renvoie la liste des noms des groupes du serveur.
            On a besoin de cette liste simple pour remplir la liste complète des groupes avec leurs membres, dans la
            recherche récursive des utilisateurs appartenant indirectement au groupe.
        """
        groups_names = []
        resume = 0
        Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume,
                                                   4096)
        while 1:
            for Champ in Enr:
                groups_names.append(Champ['name'].lower())

            if resume <= 0:
                break

            Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume,
                                                       4096)

        return groups_names
Esempio n. 4
0
def GroupEnum():
    "Enumerates all the domain groups"
    nmembers = 0
    resume = 0
    while 1:
        data, total, resume = win32net.NetGroupEnum(GlobalServer, 1, resume)
        #               print "Call to NetGroupEnum obtained %d entries of %d total" % (len(data), total)
        for group in data:
            verbose("Found group %(name)s:%(comment)s " % group)
            memberresume = 0
            while 1:
                memberdata, total, memberresume = win32net.NetGroupGetUsers(
                    GlobalServer, group['name'], 0, resume)
                for member in memberdata:
                    verbose(" Member %(name)s" % member)
                    nmembers = nmembers + 1
                if memberresume == 0:
                    break
        if not resume:
            break
 def get_all(self):
     if not self.groups:
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(Group(sid))
                     except:
                         print("[E] failed to lookup sid of %s" %
                               Group['name'])
                 if resume == 0:
                     break
         except pywintypes.error as e:
             print("[E] %s: %s" % (e[1], e[2]))
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetLocalGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(Group(sid))
                     except:
                         print("[E] failed to lookup sid of %s" %
                               Group['name'])
                 if resume == 0:
                     break
         except pywintypes.error as e:
             print("[E] %s: %s" % (e[1], e[2]))
     return self.groups
Esempio n. 6
0
 def get_all(self):
     if self.groups == []:
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(group(sid))
                     except:
                         print "[E] failed to lookup sid of %s" % group[
                             'name']
                 if resume == 0:
                     break
         except:
             print "[E] NetGroupEnum failed"
         try:
             level = 0
             resume = 0
             while True:
                 grouplist, total, resume = win32net.NetLocalGroupEnum(
                     wpc.conf.remote_server, level, resume, 999999)
                 for u in grouplist:
                     try:
                         sid, name, type = wpc.conf.cache.LookupAccountName(
                             wpc.conf.remote_server, u['name'])
                         self.groups.append(group(sid))
                     except:
                         print "[E] failed to lookup sid of %s" % group[
                             'name']
                 if resume == 0:
                     break
         except:
             print "[E] NetLocalGroupEnum failed"
     return self.groups
Esempio n. 7
0
def GroupEnum():
    "Enumerates all the domain groups"
    nmembers = 0
    resume = 0
    while 1:
        data, total, resume = win32net.NetGroupEnum(server, 1, resume)
        #               print "Call to NetGroupEnum obtained %d entries of %d total" % (len(data), total)
        for group in data:
            verbose("Found group %(name)s:%(comment)s " % group)
            memberresume = 0
            while 1:
                memberdata, total, memberresume = win32net.NetGroupGetUsers(
                    server, group["name"], 0, resume)
                for member in memberdata:
                    verbose(" Member %(name)s" % member)
                    nmembers = nmembers + 1
                if memberresume == 0:
                    break
        if not resume:
            break
    assert nmembers, "Couldnt find a single member in a single group!"
    print("Enumerated all the groups")
Esempio n. 8
0
 def testGroupsBadResume(self, server=None):
     res = 1  # Can't pass this first time round.
     with pytest.raises(win32net.error):
         win32net.NetGroupEnum(server, 0, res)
Esempio n. 9
0
    def __get_groups_V0__(self):
        """

            Version précédente. Je la garde pour conjurer le mauvais sort

            Renvoie un dictionnaire des groupes du serveur avec, pour chacun, la liste de ses membres et
            le descriptif.
            N.B. On met tous les noms en minuscules pour ne pas être emmerdé quand on voudra faire
            "if nom in liste"
        """
        groups_list = {}
        resume = 0
        Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume,
                                                   4096)
        while 1:
            for Champ in Enr:
                group_name = Champ['name'].lower()
                group_comment = Champ['comment']
                members_list = []
                memberresume = 0
                memberdata, total, memberresume = win32net.NetGroupGetUsers(
                    self.server, group_name, 1, memberresume)

                while 1:
                    for member in memberdata:
                        members_list.append(member['name'].lower())

                    if memberresume <= 0:
                        break

                    memberdata, total, memberresume = win32net.NetGroupGetUsers(
                        self.server, group_name, 1, memberresume)

                members_list.sort()
                groups_list[group_name] = [members_list, group_comment]

            if resume <= 0:
                break

            Enr, Total, resume = win32net.NetGroupEnum(self.server, 2, resume,
                                                       4096)
        """
            Cet abruti de microsoft s'obstine à utiliser des alias pour certains noms ("c:/Utilisateurs" par exemple
            qui est en réalité c:/Users"...).
            C'est ainsi que le groupe "domain users" est parfois traduit par "utilisateurs".
            Pour pas être emmerdés on ajoute artificiellement ces noms à la con. (fruit de l'expérience ! Et c'est
            certainement pas fini. À adapter aussi en fonction de la langue)
        """
        try:
            groups_list['administrateurs'] = groups_list['domain admins']
        except:
            pass

        try:
            groups_list['administrators'] = groups_list['domain admins']
        except:
            pass

        try:
            groups_list['utilisateurs'] = groups_list['domain users']
        except:
            pass

        try:
            groups_list['users'] = groups_list['domain users']
        except:
            pass

        return groups_list
import win32net

#print users
users = win32net.NetUserEnum('localhost', 0)
print "USERS"
print "=========="
for user in users[0]:
    print user['name']
print ""

#print groups
groups = win32net.NetGroupEnum('localhost', 0)
print "GROUPS"
print "=========="
for group in groups[0]:
    print group['name']
print ""

#print shares
shares = win32net.NetShareEnum('localhost', 0)
print "SHARES"
print "=========="
for share in shares[0]:
    print share['netname']
print ""

#print servers
servers = win32net.NetServerEnum(None, 100)
print "SERVERS"
print "=========="
for server in servers[0]: