1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
from json import dumps
from .base import Converter
from ...helpers import get_ip, iterate_files
class GeoJsonConverter(Converter):
def header(self):
self.fout.write("""{
"type": "FeatureCollection",
"features": [
""")
def footer(self):
self.fout.write("""{ }]}""")
def process(self, files):
# Write the header
self.header()
# We only want to generate 1 datapoint for each IP - not per service
unique_hosts = set()
for banner in iterate_files(files):
ip = get_ip(banner)
if not ip:
continue
if ip not in unique_hosts:
self.write(ip, banner)
unique_hosts.add(ip)
self.footer()
def write(self, ip, host):
try:
lat, lon = host['location']['latitude'], host['location']['longitude']
feature = {
'type': 'Feature',
'id': ip,
'properties': {
'name': ip,
'lat': lat,
'lon': lon,
},
'geometry': {
'type': 'Point',
'coordinates': [lon, lat],
},
}
self.fout.write(dumps(feature) + ',')
except Exception:
pass
|