Olá! If the results scan return without port for the host, its is not working. So I add the code below and now is working fine:
ports = []
campo = host.find('ports')
if campo is None: # campo não existe, retorna o valor default
ports.append({
'port': 0,
'protocol': None,
'state': None,
'service_name': None,
'service_info': None,
'http_title': None,
'ssl_common_name': None,
'ssl_issuer': None
})
else:
for port in host.find('ports').findall('port'):
port_id = port.get('portid')
protocol = port.get('protocol')
state = port.find('state').get('state')
if state == 'open':
ports_open += 1
total_open_ports += 1
elif state == 'closed':
ports_closed += 1
elif state == 'filtered':
ports_filtered += 1
service = port.find('service')
service_name = service.get('name', None) if service else None
service_product = service.get('product', None) if service else None
service_version = service.get('version', None) if service else None
service_ostype = service.get('ostype', None) if service else None
service_info = (service_product if service_product else '') + (' ' + service_version if service_version else '')
http_title = None
ssl_common_name = None
ssl_issuer = None
scripts = port.findall('script')
for script in scripts:
if script.get('id') == 'http-title':
http_title = script.get('output')
elif script.get('id') == 'ssl-cert':
for table in script.findall('table'):
if table.get('key') == 'subject':
cn_elem = table.find("elem[@key='commonName']")
if cn_elem is not None:
ssl_common_name = cn_elem.text
elif table.get('key') == 'issuer':
issuer_elems = {elem.get('key'): elem.text for elem in table.findall('elem')}
if 'commonName' in issuer_elems:
ssl_issuer = f"{issuer_elems.get('commonName')} {issuer_elems.get('organizationName', '')}".strip()
if service_ostype and os == 'Unknown':
os = service_ostype
ports.append({
'port': port_id,
'protocol': protocol,
'state': state,
'service_name': service_name,
'service_info': service_info,
'http_title': http_title,
'ssl_common_name': ssl_common_name,
'ssl_issuer': ssl_issuer
})
extraports = host.find('ports').find('extraports')
Olá! If the results scan return without port for the host, its is not working. So I add the code below and now is working fine:
ports = [] campo = host.find('ports') if campo is None: # campo não existe, retorna o valor default ports.append({ 'port': 0, 'protocol': None, 'state': None, 'service_name': None, 'service_info': None, 'http_title': None, 'ssl_common_name': None, 'ssl_issuer': None }) else: for port in host.find('ports').findall('port'): port_id = port.get('portid') protocol = port.get('protocol') state = port.find('state').get('state') if state == 'open': ports_open += 1 total_open_ports += 1 elif state == 'closed': ports_closed += 1 elif state == 'filtered': ports_filtered += 1