示例#1
0
    def searchExitNodes(self, numberOfScans, scanIdentifier):
        if self.cursor is None:
            self.initDatabase()
        exitNodes = []
        if scanIdentifier is None:
            self.cursor.execute(database.selectTorScan, (numberOfScans,))
        else:
            self.cursor.execute(database.selectTorScanIdentifier, (scanIdentifier,))

        for row in self.cursor.fetchall():
            scanId, scanDate = row
            self.cursor.execute(database.selectTorNodeData, (scanId,))
            for node in  self.cursor.fetchall():
                torNodeId, host, state, reason, nickName = node
                nodeData = TorNodeData()
                nodeData.id = torNodeId
                nodeData.host = host
                nodeData.state = state
                nodeData.reason = reason
                nodeData.nickName = nickName
                ports = self.cursor.execute(database.selectTorNodePort, (torNodeId,) )
                for port in ports.fetchall():
                    (portId, portState, portReason, portNumber, portName, portVersion, torNode) = port
                    nodePort = TorNodePort()
                    nodePort.id = portId
                    nodePort.state = portState
                    nodePort.reason = portReason
                    nodePort.port = portNumber
                    nodePort.name = portName
                    nodePort.version = portVersion
                    nodePort.torNodeId = torNode
                    if "open" in portState:
                        nodeData.openPorts.append(nodePort)
                    else:
                        nodeData.closedFilteredPorts.append(nodePort)
                exitNodes.append(nodeData)
        return exitNodes