From f7be02bf0a0bcd5855f329f4685bab16654d3d70 Mon Sep 17 00:00:00 2001 From: panki27 Date: Wed, 15 Jan 2020 21:23:40 +0100 Subject: [PATCH] geoip lookup added. had to downgrade to python2 :( --- ip.py | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/ip.py b/ip.py index aa9170f..85b9f2b 100644 --- a/ip.py +++ b/ip.py @@ -1,7 +1,7 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python import cgi import os -import html +#import html F_PLAIN = 0 F_XML = 1 @@ -9,31 +9,43 @@ F_JSON = 2 def header(): print("Content-type: text/plain") - print() + print("") def main(): params = cgi.FieldStorage() out = { - "ip": None + "ip": None, + "country": None, + "continent": None, + "location": None } header() - remote_ip = html.escape(os.environ["REMOTE_ADDR"]) + out["ip"] = cgi.escape(os.environ["REMOTE_ADDR"]) format = F_PLAIN if(len(params) > 0): for key in params: if key == "format": r_format = params[key].value if r_format == "xml": - format = F_PLAIN print("lol xml are you serious? get with the times") elif r_format == "json": format = F_JSON + elif key == "and": + extras = params[key].value.split(',') + if "geo" in extras: + from geoip import geolite2 + match = geolite2.lookup(out["ip"].encode("UTF-8")) + if match is not None: + out["country"] = match.country + out["continent"] = match.continent + out["location"] = match.location - out["ip"] = remote_ip - for item in out: - if format == F_PLAIN: - print(out[item]) - elif format == F_JSON: - import json - print(json.dumps(out)) + + if format == F_PLAIN: + for item in out: + if out[item] is not None: + print(out[item]) + elif format == F_JSON: + import json + print(json.dumps(dict((k, v) for k, v in out.items() if v is not None))) if __name__ == "__main__": main() \ No newline at end of file