Esempio n. 1
0
    def nmap_no_portscan(self, host, args=None):
        """
        Scan host using the nmap tcp connect

        @cmd nmap -sn 192.168.178.1
        """
        parser  = NmapCommandParser(None)

        if(args):
            assert(isinstance(args, str)), "Expected string got {0} instead".format(type(args))

        scancommand = " {host} {default}".format(host=host, default=self.no_port_scan)
        scan_command = self.default_command() + scancommand
        if(args):
            scan_command += " {0}".format(args)
        scan_shlex = shlex.split(scan_command) # prepare it

        # Use the top_port_parser
        output = self.run_command(scan_shlex)
        xml_root = self.get_xml_et(output)
        tcp_results = parser.parse_noportscan(xml_root)
        return tcp_results
Esempio n. 2
0
class NmapHostDiscovery(Nmap):
    """
    This object will perform host discovery

    1) Only port scan    (-Pn)
    2) Only host discover    (-sn)
    3) Arp discovery on a local network  (-PR)
    4) Disable DNS resolution    (-n)
    """
    def __init__(self, path=None):
        super(NmapHostDiscovery, self).__init__(path=path)

        self.port_scan_only = "-Pn"
        self.no_port_scan = "-sn"
        self.arp_discovery = "-PR"
        self.disable_dns = "-n"
        self.parser  = NmapCommandParser(None)


    def scan_command(self, scan_type, target, args):
        def tpl(i):
            scan_template = {
                1:self.port_scan_only,
                2:self.no_port_scan,
                3:self.arp_discovery,
                4:self.disable_dns
            }

            return scan_template.get(i)
        
        for i in range (1, 5):
            if scan_type == tpl(i):
                scan = " {target} {default}".format(target=target, default=scan_type)
                scan_type_command = self.default_command() + scan

                if(args):
                    scan_type_command += " {0}".format(args)
                
                scan_shlex = shlex.split(scan_type_command)

                # Use the ping scan parser
                output = self.run_command(scan_shlex)
                xml_root = self.get_xml_et(output)

        return xml_root

    def nmap_portscan_only(self, target, args=None):
        """
        Scan target using the nmap tcp connect

        @cmd nmap -Pn 192.168.178.1
        """
        xml_root = self.scan_command(self.port_scan_only, target=target, args=args)

        tcp_results = self.parser.filter_top_ports(xml_root)
        return tcp_results

    def nmap_no_portscan(self, target, args=None):
        """
        Scan target using the nmap tcp connect

        @cmd nmap -sn 192.168.178.1
        """
        if(args):
            assert(isinstance(args, str)), "Expected string got {0} instead".format(type(args))
        xml_root = self.scan_command(self.no_port_scan, target=target, args=args)

        tcp_results = self.parser.parse_noportscan(xml_root)
        return tcp_results

    def nmap_arp_discovery(self, target, args=None):
        """
        Scan target using the nmap tcp connect

        @cmd nmap -PR 192.168.178.1
        """
        if(args):
            assert(isinstance(args, str)), "Expected string got {0} instead".format(type(args))

        xml_root = self.scan_command(self.arp_discovery, target=target, args=args)

        tcp_results = self.parser.filter_top_ports(xml_root)
        return tcp_results

    def nmap_disable_dns(self, target, args=None):
        """
        Scan target using the nmap tcp connect

        @cmd nmap -n 192.168.178.1
        """
        if(args):
            assert(isinstance(args, str)), "Expected string got {0} instead".format(type(args))

        xml_root = self.scan_command(self.disable_dns, target=target, args=args)

        tcp_results = self.parser.filter_top_ports(xml_root)
        return tcp_results