예제 #1
0
    def get_members(self, group_sid, maxhops=1):
        try:
            network = GraphData()

            group_id = self.resolve_sid_to_id(group_sid)
            self.add_node(network, group_id)
            prev_groups = [group_sid]
            for distance in range(maxhops):
                next_groups = []
                for group_sid in prev_groups:
                    for sid, otype in self.get_edges_onelevel(
                            group_sid, 'member', 'in'):
                        if otype == 'group':
                            next_groups.append(sid)
                        if network.node_present(sid) is False:
                            rid = self.resolve_sid_to_id(sid)
                            self.add_node(network, rid)

                        network.nodes[sid].set_distance(distance)
                        network.add_edge(group_sid, sid, label='member')

                prev_groups = next_groups

            return network
        except Exception as e:
            import traceback
            traceback.print_exc()
            print(e)
            raise e
예제 #2
0
    def get_dcsync(self):
        try:
            network = GraphData()
            forest_sids = []
            groups = []
            for adid in self.adids:
                adinfo = self.dbsession.query(ADInfo).get(adid)
                forest_sids.append(adinfo.objectSid)

            for forest_sid in forest_sids:
                self.add_node(network, self.resolve_sid_to_id(forest_sid))
                for sid, otype in self.get_edges_onelevel(
                        forest_sid, 'GetChanges', 'in'):
                    if otype == 'group':
                        groups.append(sid)
                    if network.node_present(sid) is False:
                        rid = self.resolve_sid_to_id(sid)
                        self.add_node(network, rid)

                    network.add_edge(forest_sid, sid, label='GetChanges')

                for sid, otype in self.get_edges_onelevel(
                        forest_sid, 'GetChangesAll', 'in'):
                    if otype == 'group':
                        groups.append(sid)
                    if network.node_present(sid) is False:
                        rid = self.resolve_sid_to_id(sid)
                        self.add_node(network, rid)

                    network.add_edge(forest_sid, sid, label='GetChangesAll')

            for group_sid in groups:
                network += self.get_members(group_sid, 1)

            return network
        except Exception as e:
            import traceback
            traceback.print_exc()
            print(e)
            raise e