Skip to content
Snippets Groups Projects
Commit 0d53ecdc authored by Pavel Kácha's avatar Pavel Kácha
Browse files

Switch to local GeoIP instead of remote service

parent 4a69d567
No related branches found
No related tags found
No related merge requests found
...@@ -6,17 +6,18 @@ ...@@ -6,17 +6,18 @@
# Copyright (C) 2016 Cesnet z.s.p.o # Copyright (C) 2016 Cesnet z.s.p.o
# Use of this source is governed by a 3-clause BSD-style license, see LICENSE file. # Use of this source is governed by a 3-clause BSD-style license, see LICENSE file.
import GeoIP
import codecs
import time
def getLastEvents(events, client, key, cert, cacert, secret): def getLastEvents(events, client, key, cert, cacert, secret):
try: ses = Session()
ses = Session() #req = Request('POST', 'https://warden-hub.cesnet.cz/warden3/getEvents?client='+ client + ('&secret='+ secret if secret else "")+'&count=' + events + '&id=0')
req = Request('POST', 'https://warden-hub.cesnet.cz/warden3/getEvents?client='+ client + ('&secret='+ secret if secret else "")+'&count=' + events) req = Request('POST', 'https://warden-hub.cesnet.cz/warden3/getEvents?client='+ client + ('&secret='+ secret if secret else "")+'&count=' + events)
pre = req.prepare() #req = Request('POST', 'https://warden-hub.cesnet.cz/warden3/getEvents?nocat=Other&client='+ client + ('&secret='+ secret if secret else "")+'&count=' + events)
res = ses.send(pre, cert = (cert, key), verify=cacert) pre = req.prepare()
except requests.exceptions.RequestException as error: res = ses.send(pre, cert = (cert, key), verify=cacert)
print error
sys.exit(1)
data = res.json() data = res.json()
i = 0 i = 0
...@@ -29,7 +30,7 @@ def getLastEvents(events, client, key, cert, cacert, secret): ...@@ -29,7 +30,7 @@ def getLastEvents(events, client, key, cert, cacert, secret):
if (key == 'origin') or (key == 'destination'): if (key == 'origin') or (key == 'destination'):
event[key] = {} event[key] = {}
if 'IP4' in p[value][0]: if 'IP4' in p[value][0]:
event[key]['ip'] = p[value][0]['IP4'] event[key]['ip'] = p[value][0]['IP4'][0]
else: else:
event[key] = {} event[key] = {}
elif (key == 'event'): elif (key == 'event'):
...@@ -49,21 +50,19 @@ def getLastEvents(events, client, key, cert, cacert, secret): ...@@ -49,21 +50,19 @@ def getLastEvents(events, client, key, cert, cacert, secret):
return eventsList return eventsList
def getGeolocation(ip): def getGeolocation(ip, db):
try: data = db.record_by_addr(ip)
response = requests.get('http://freegeoip.net/json/' + str(ip[0]))
except requests.exceptions.RequestException as error:
print error
sys.exit(1)
try: if not data:
json_data = json.loads(response.text) return {}
except ValueError as error: else:
print error return {
sys.exit(1) 'latitude': data['latitude'],
'longitude': data['longitude'],
return {'latitude': json_data['latitude'], 'longitude': json_data['longitude'], 'country_name': json_data['country_name'], 'city': json_data['city']} 'country_name': unicode(data['country_name'], "utf-8") if data['country_name'] else None,
'city': unicode(data['city'], "utf-8") if data['city'] else None
}
def main(args): def main(args):
...@@ -79,13 +78,16 @@ def main(args): ...@@ -79,13 +78,16 @@ def main(args):
else: else:
path = 'warden-map.json' path = 'warden-map.json'
db = GeoIP.open("GeoLiteCity.dat", GeoIP.GEOIP_MEMORY_CACHE)
db.set_charset(GeoIP.GEOIP_CHARSET_UTF8)
wardenEvents = getLastEvents(events, client, key, cert, cacert, secret) wardenEvents = getLastEvents(events, client, key, cert, cacert, secret)
for p in wardenEvents: for p in wardenEvents:
for target in {'origin', 'destination'}: for target in {'origin', 'destination'}:
geoData = {} geoData = {}
if 'ip' in p[target]: if 'ip' in p[target]:
geoData = getGeolocation(p[target]['ip']) geoData = getGeolocation(p[target]['ip'], db)
for value in {'latitude', 'longitude', 'country_name', 'city'}: for value in {'latitude', 'longitude', 'country_name', 'city'}:
if value in geoData: if value in geoData:
if not geoData[value]: if not geoData[value]:
...@@ -102,12 +104,10 @@ def main(args): ...@@ -102,12 +104,10 @@ def main(args):
p[target]['latitude'] = 49.743 p[target]['latitude'] = 49.743
p[target]['longitude'] = 15.338 p[target]['longitude'] = 15.338
try: wardenEvents.append(int(time.time()));
with open(path, 'w') as outfile:
json.dump(wardenEvents, outfile) with codecs.open(path, 'w', encoding="utf-8") as outfile:
except IOError: json.dump(wardenEvents, outfile, ensure_ascii = False)
print "Error: File does not appear to exist."
sys.exit(1)
return 0 return 0
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment