from .base import Converter
from ...helpers import iterate_files
class KmlConverter(Converter):
def header(self):
self.fout.write("""
""")
def footer(self):
self.fout.write("""""")
def process(self, files):
# Write the header
self.header()
hosts = {}
for banner in iterate_files(files):
ip = banner.get('ip_str', banner.get('ipv6', None))
if not ip:
continue
if ip not in hosts:
hosts[ip] = banner
hosts[ip]['ports'] = []
hosts[ip]['ports'].append(banner['port'])
for ip, host in iter(hosts.items()):
self.write(host)
self.footer()
def write(self, host):
try:
ip = host.get('ip_str', host.get('ipv6', None))
lat, lon = host['location']['latitude'], host['location']['longitude']
placemark = '{}]]>'.format(ip)
placemark += '{0}'.format(host['hostnames'][0])
placemark += 'Ports
'
for port in host['ports']:
placemark += """
- {}
""".format(port)
placemark += '
'
placemark += """
""".format(ip)
placemark += ']]>'
placemark += '{},{}'.format(lon, lat)
placemark += ''
self.fout.write(placemark.encode('utf-8'))
except Exception:
pass