def getHostsAndPortsByServiceName(self, service_name, filters: Filters): query = ("SELECT hosts.ip,ports.portId,ports.protocol,ports.state,ports.hostId,ports.serviceId," "services.name,services.product,services.version,services.extrainfo,services.fingerprint " "FROM portObj AS ports " + "INNER JOIN hostObj AS hosts ON hosts.id = ports.hostId " + "LEFT OUTER JOIN serviceObj AS services ON services.id=ports.serviceId " + "WHERE services.name=?") query += applyFilters(filters) return self.dbAdapter.metadata.bind.execute(query, str(service_name)).fetchall()
def getServiceNames(self, filters: Filters): query = ( "SELECT DISTINCT service.name FROM serviceObj as service " "INNER JOIN portObj as ports " "INNER JOIN hostObj AS hosts " "ON hosts.id = ports.hostId AND service.id=ports.serviceId WHERE 1=1" ) query += applyFilters(filters) query += ' ORDER BY service.name ASC' return self.db_adapter.metadata.bind.execute(query).fetchall()
def test_applyFilters_InvokedWithNoFilters_ReturnsEmptyString(self): from app.auxiliary import Filters from db.filters import applyFilters filters: Filters = Filters() filters.apply(up=True, down=True, checked=True, portopen=True, portfiltered=True, portclosed=True, tcp=True, udp=True) result = applyFilters(filters) self.assertEqual("", result)
def test_applyFilters_InvokedWithHostCheckedFilter_ReturnsQueryFilterWithHostsChecked( self): from app.auxiliary import Filters from db.filters import applyFilters filters: Filters = Filters() filters.apply(up=True, down=True, checked=False, portopen=True, portfiltered=True, portclosed=True, tcp=True, udp=True) result = applyFilters(filters) self.assertEqual(" AND hosts.checked != 'True'", result)
def test_applyFilters_InvokedWithUdpProtocolFilter_ReturnsQueryFilterWithUdp( self): from app.auxiliary import Filters from db.filters import applyFilters filters: Filters = Filters() filters.apply(up=True, down=True, checked=True, portopen=True, portfiltered=True, portclosed=True, tcp=True, udp=False) result = applyFilters(filters) self.assertEqual(" AND ports.protocol != 'udp'", result)
def test_applyFilters_InvokedWithPortOpenFilter_ReturnsQueryFilterWithPortOpen( self): from app.auxiliary import Filters from db.filters import applyFilters filters: Filters = Filters() filters.apply(up=True, down=True, checked=True, portopen=False, portfiltered=True, portclosed=True, tcp=True, udp=True) result = applyFilters(filters) self.assertEqual( " AND ports.state != 'open' AND ports.state != 'open|filtered'", result)
def test_applyFilters_InvokedWithKeywordsFilter_ReturnsQueryFilterWithKeywords( self): from app.auxiliary import Filters from db.filters import applyFilters filters: Filters = Filters() keyword = "some-keyword" filters.apply(up=True, down=True, checked=True, portopen=True, portfiltered=True, portclosed=True, tcp=True, udp=True, keywords=[keyword]) result = applyFilters(filters) self.assertEqual( " AND (hosts.ip LIKE '%some-keyword%' OR hosts.osMatch LIKE '%some-keyword%'" " OR hosts.hostname LIKE '%some-keyword%')", result)