Changeset 3890

Show
Ignore:
Timestamp:
01/06/09 13:43:36 (4 years ago)
Author:
gpolo
Message:

Simplified parsing of the simpler xml entities;
Improved ParserBasics? mapping and added HostInfo? mapping of what to
expect from parsed xmls.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branch/nmapparser/NmapParser.py

    r3889 r3890  
    3636    def __init__(self, id): 
    3737        self.id = id 
     38        self.nmap_host = { 
     39                'status': {'state': '', 'reason': ''}, 
     40                'smurf': {'responses': ''}, 
     41                'times': {'to': '', 'srtt': '', 'rttvar': ''}, 
     42                'hostscript': [], 
     43                'distance': {'value': ''}, 
     44                'trace': {}, 
     45                'address': [], 
     46                'hostnames': [], 
     47                'ports': {}, 
     48                'uptime': {'seconds': '', 'lastboot': ''}, 
     49                'tcpsequence': {'index': '', 'values': '', 'class': ''}, 
     50                'tcptssequence': {'values': '', 'class': ''}, 
     51                'ipidsequence': {'values': '', 'class': ''}, 
     52                'os': {} 
     53                } 
    3854 
    3955    # Host ID 
    4056    def get_id(self): 
    41         if self._id != 0: 
     57        try: 
    4258            return self._id 
    43         raise Exception("Id was not set yet.") 
     59        except AttributeError: 
     60            raise Exception("Id was not set yet.") 
    4461 
    4562    def set_id(self, id): 
     
    364381 
    365382 
    366     _id = 0 
    367383    _tcpsequence = {} 
    368384    _osclasses = [] 
     
    390406        self.nmap = { 
    391407                'nmaprun': {}, 
    392                 'runstats': {}, 
    393                 'verbose': {}, 
    394                 'debugging': {}, 
     408                'runstats': { 
     409                    'finished': {}, 
     410                    'hosts': {'up': '', 'down': '', 'total': ''} 
     411                    }, 
     412                'verbose': {'level': ''}, 
     413                'debugging': {'level': ''}, 
    395414                'scaninfo': [], 
    396415                'taskbegin': [], 
     
    477496 
    478497    def get_debugging_level (self): 
    479         return self.nmap.get('debugging', '') 
     498        return self.nmap['debugging'].get('level', '') 
    480499 
    481500    def set_debugging_level(self, level): 
    482         self.nmap['debugging'] = level 
     501        self.nmap['debugging']['level'] = level 
     502 
     503    def set_debugging(self, debug): 
     504        self.nmap['debugging'] = debug 
    483505 
    484506    def get_verbose_level (self): 
    485         return self.nmap.get('verbose', '') 
     507        return self.nmap['verbose'].get('level', '') 
    486508 
    487509    def set_verbose_level(self, level): 
    488         self.nmap['verbose'] = level 
     510        self.nmap['verbose']['level'] = level 
     511 
     512    def set_verbose(self, verbose): 
     513        self.nmap['verbose'] = verbose 
    489514 
    490515    def get_scaninfo(self): 
    491         return self.nmap.get('scaninfo', '') 
     516        return self.nmap.get('scaninfo', []) 
    492517 
    493518    def set_scaninfo(self, info): 
    494519        self.nmap['scaninfo'] = info 
     520 
     521    def append_scaninfo(self, info): 
     522        self.nmap['scaninfo'].append(info) 
    495523 
    496524    def get_services_scanned (self): 
     
    837865        self.nmap["scan_name"] = attrs.get("scan_name", "") 
    838866 
    839     def _parse_scaninfo(self, attrs): 
    840         dic = {} 
    841  
    842         dic["type"] = attrs.get("type", "") 
    843         dic["protocol"] = attrs.get("protocol", "") 
    844         dic["numservices"] = attrs.get("numservices", "") 
    845         dic["services"] = attrs.get("services", "") 
    846  
    847         self.nmap["scaninfo"].append(dic) 
    848  
    849     def _parse_verbose(self, attrs): 
    850         self.nmap["verbose"] = attrs.get("level", "") 
    851  
    852     def _parse_debugging(self, attrs): 
    853         self.nmap["debugging"] = attrs.get("level", "") 
    854867 
    855868    def _parse_runstats_finished(self, attrs): 
     
    971984        if name == "nmaprun": 
    972985            self._parse_nmaprun(attrs) 
     986        elif name in ("verbose", "debugging", "taskbegin", "taskprogress", 
     987                "taskend"): 
     988            getattr(self, "set_%s" % name)(attrs.copy()) 
    973989        elif name == "scaninfo": 
    974             self._parse_scaninfo(attrs) 
    975         elif name == "verbose": 
    976             self._parse_verbose(attrs) 
    977         elif name == "debugging": 
    978             self._parse_debugging(attrs) 
     990            self.append_scaninfo(attrs.copy()) 
     991 
     992        # Parse runstats 
    979993        elif name == "runstats": 
    980994            self.in_run_stats = True 
     
    983997        elif self.in_run_stats and name == "hosts": 
    984998            self._parse_runstats_hosts(attrs) 
     999 
     1000        # Parse hosts 
    9851001        elif name == "host": 
    9861002            self.in_host = True