async def _scan_ports(self, scan_only, ports): port_range_allow = NmapTool.ports_from_list(tcp=cfg['portdetection.tcp.ports.include'], udp=cfg['portdetection.udp.ports.include']) port_range_deny = NmapTool.ports_from_list(tcp=cfg['portdetection.tcp.ports.exclude'], udp=cfg['portdetection.udp.ports.exclude']) ports = [port for port in ports if port.in_range(port_range_allow) and not port.in_range(port_range_deny)] self.context.add_task(Executor(context=self.context, nodes=[], ports=ports, scan_only=scan_only), manager=TaskManagerType.QUICK)
def test_ports_from_list(self): tcp = ['14', '16-18'] udp = ['87', '34-36'] sctp = ['19', '25-28'] expected = { TransportProtocol.TCP: {14, 16, 17, 18}, TransportProtocol.UDP: {87, 34, 35, 36}, TransportProtocol.SCTP: {19, 25, 26, 27, 28} } result = NmapTool.ports_from_list(tcp=tcp, udp=udp, sctp=sctp) self.assertEqual(result, expected)
async def scan_ports(self, nodes): include_ports = NmapTool.ports_from_list( tcp=cfg['portdetection.tcp.ports.include']).get( TransportProtocol.TCP) exclude_ports = NmapTool.ports_from_list( tcp=cfg['portdetection.tcp.ports.exclude']).get( TransportProtocol.TCP) ports = list(include_ports - exclude_ports) task = {str(node.ip): ports_to_string(set(ports)) for node in nodes} try: found_ports = await self.portscan.send(task) except PortscanError as exception: log.error("Error during performing scan: %s", exception) found_ports = {} return list({ Port(number=port, node=node, transport_protocol=TransportProtocol.TCP) for node in nodes for port in found_ports.get(str(node.ip), []) })