📄 nmapparser.py
字号:
#!/usr/bin/env python# -*- coding: utf-8 -*-# Copyright (C) 2005 Insecure.Com LLC.## Author: Adriano Monteiro Marques <py.adriano@gmail.com>## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USAimport reimport osimport os.pathimport timefrom types import StringTypesfrom xml.sax import make_parserfrom xml.sax.handler import ContentHandlerfrom xml.sax.saxutils import XMLGeneratorfrom xml.sax.xmlreader import AttributesImpl as Attributesfrom zenmapCore.I18N import _from zenmapCore.UmitLogging import logmonths = ('',_('January'), _('February'), _('March'), _('April'), _('May'), _('June'), _('July'), _('August'), _('September'), _('October'), _('November'), _('December'),)class HostInfo(object): def __init__(self, id): self.id = id # Host ID def get_id(self): if self._id != 0: return self._id raise Exception("Id was not set yet.") def set_id(self, id): if type(id) == type(0): self._id = id elif type(id) in StringTypes: try: self._id = int(id) except: raise Exception("Id invalid! Id must be an integer, but received \this instead: '%s'" % str(id)) else: raise Exception("Id invalid! Id must be an integer, but received \this instead: '%s'" % str(id)) # TCP SEQUENCE def set_tcpsequence(self, sequence): if type(sequence) == type([]): self._tcpsequence = sequence[0] else: self._tcpsequence = sequence def get_tcpsequence(self): if self._tcpsequence: return self._tcpsequence return {} # TCPTS SEQUENCE def set_tcptssequence(self, sequence): if type(sequence) == type([]): self._tcptssequence = sequence[0] else: self._tcptssequence = sequence def get_tcptssequence(self): if self._tcptssequence: return self._tcptssequence return {} # VENDOR def get_vendor(self): try:return self._mac['vendor'] except:return _('Unknown') # IP ID SEQUENCE def set_ipidsequence(self, sequence): if type(sequence) == type([]): self._ipidsequence = sequence[0] else: self._ipidsequence = sequence def get_ipidsequence(self): if self._ipidsequence: return self._ipidsequence return {} # OS CLASSES def set_osclasses(self, classes): self._osclasses = classes def get_osclasses(self): return self._osclasses # OS MATCH def set_osmatch(self, match): if type(match) == type([]): self._osmatch = match[0] else: self._osmatch = match def get_osmatch(self): if self._osmatch: return self._osmatch return {} # PORTS USED def set_ports_used(self, ports): self._ports_used = ports def get_ports_used(self): return self._ports_used # UPTIME # FORMAT: {"seconds":"", "lastboot":""} def set_uptime(self, uptime): self._uptime = uptime def get_uptime(self): if self._uptime: return self._uptime # Avoid empty dict return return {"seconds":"", "lastboot":""} # PORTS def set_ports(self, port_list): self._ports = port_list def get_ports(self): return self._ports # HOSTNAMES def set_hostnames(self, hostname_list): self._hostnames = hostname_list def get_hostnames(self): return self._hostnames # IP def set_ip_address(self, addr): log.warning(_("zenmapCore.NmapParser.set_ip_address deprecated! Use \zenmapCore.NmapParser.set_ip instead.")) self.set_ip(addr) def get_ip_address(self): log.warning(_("zenmapCore.NmapParser.get_ip_address deprecated! Use \zenmapCore.NmapParser.get_ip instead.")) return self.get_ip() def set_ip(self, addr): self._ip = addr def get_ip(self): return self._ip # COMMENT def get_comment(self): return self._comment def set_comment(self, comment): self._comment = comment # MAC def set_mac_address(self, addr): log.warning(_("zenmapCore.NmapParser.set_mac_address deprecated! Use \zenmapCore.NmapParser.set_mac instead.")) self.set_mac(addr) def get_mac_address(self): log.warning(_("zenmapCore.NmapParser.get_mac_address deprecated! Use \zenmapCore.NmapParser.get_mac instead.")) return self.get_mac() def set_mac(self, addr): self._mac = addr def get_mac(self): return self._mac # IPv6 def set_ipv6_address(self, addr): log.warning(_("zenmapCore.NmapParser.set_ipv6_address deprecated! Use \zenmapCore.NmapParser.set_ipv6 instead.")) self.set_ipv6(addr) def get_ipv6_address(self): log.warning(_("zenmapCore.NmapParser.get_ipv6_address deprecated! Use \zenmapCore.NmapParser.get_ipv6 instead.")) return self.get_ipv6() def set_ipv6(self, addr): self._ipv6 = addr def get_ipv6(self): return self._ipv6 # STATE def set_state(self, status): self._state = status def get_state(self): return self._state # HOSTNAME def get_hostname(self): hostname = '' try: hostname = self._hostnames[0]['hostname'] + ' ' except: pass # FIXME: Check if i can return the 'addr' key directly from get_ip, get_ipv6 and get_mac if self.ip: hostname += self._ip['addr'] elif self.ipv6: hostname += self._ipv6['addr'] elif self.mac: hostname += self._mac['addr'] else: hostname = _('Unknown Host') return hostname def get_open_ports(self): ports = self.get_ports() open = 0 for i in ports: port = i['port'] for p in port: if re.findall('open', p['port_state']): open+=1 return open def get_filtered_ports(self): ports = self.get_ports() filtered = 0 for i in ports: port = i['port'] for p in port: if re.findall('filtered', p['port_state']): filtered+=1 return filtered def get_closed_ports(self): ports = self.get_ports() closed = 0 for i in ports: port = i['port'] for p in port: if re.findall('closed', p['port_state']): closed+=1 return closed def get_scanned_ports(self): ports = self.get_ports() scanned = 0 for i in ports: port = i['port'] for p in port: scanned+=1 return scanned def get_services(self): services = [] for port in self.ports: for p in port.get("port", []): services.append({"service_name":p.get("service_name", _("unknown")), "portid":p.get("portid", ""), "service_version":p.get("service_version", _("Unknown version")), "service_product":p.get("service_product", ""), "port_state":p.get("port_state", _("Unknown")), "protocol":p.get("protocol", "")}) return services # Properties id = property(get_id, set_id) tcpsequence = property(get_tcpsequence, set_tcpsequence) osclasses = property(get_osclasses, set_osclasses) osmatch = property(get_osmatch, set_osmatch) ports = property(get_ports, set_ports) ports_used = property(get_ports_used, set_ports_used) uptime = property(get_uptime, set_uptime) hostnames = property(get_hostnames, set_hostnames) tcptssequence = property(get_tcptssequence, set_tcptssequence) ipidsequence = property(get_ipidsequence, set_ipidsequence) ip = property(get_ip, set_ip) ipv6 = property(get_ipv6, set_ipv6) mac = property(get_mac, set_mac) state = property(get_state, set_state) comment = property(get_comment, set_comment) services = property(get_services) _id = 0 _tcpsequence = {} _osclasses = [] _osmatch = [] _ports = [] _ports_used = [] _uptime = {} _hostnames = [] _tcptssequence = {} _ipidsequence = {} _ip = {} _ipv6 = {} _mac = {} _state = '' _comment = ''class ParserBasics(object): def __init__ (self): self.nmap = {'nmaprun':{},\ 'scaninfo':[],\ 'verbose':'',\ 'debugging':'',\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -