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

' placemark += """
View Details
powered by Shodan
""".format(ip) placemark += ']]>
' placemark += '{},{}'.format(lon, lat) placemark += '
' self.fout.write(placemark.encode('utf-8')) except Exception: pass