]> git.ipfire.org Git - ipfire.org.git/blame - src/backend/geoip.py
Introduce autotools
[ipfire.org.git] / src / backend / geoip.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
9068dba1 3import IPy
638e9782
MT
4import re
5
9068dba1 6import countries
940227cb 7
9068dba1 8from misc import Object
940227cb 9
9068dba1
MT
10class GeoIP(Object):
11 def guess_address_family(self, addr):
12 if ":" in addr:
13 return 6
940227cb 14
9068dba1 15 return 4
65afea2f 16
9068dba1
MT
17 def get_country(self, addr):
18 ret = self.get_all(addr)
940227cb 19
9068dba1
MT
20 if ret:
21 return ret.country
119f55d7 22
9068dba1 23 def get_location(self, addr):
5488a9f4
MT
24 query = "SELECT * FROM geoip \
25 WHERE %s BETWEEN start_ip AND end_ip LIMIT 1"
0673d1b0 26
c89084ce 27 return self.db.get(query, addr)
0673d1b0 28
9068dba1 29 def get_asn(self, addr):
5488a9f4
MT
30 query = "SELECT asn FROM geoip_asn \
31 WHERE %s BETWEEN start_ip AND end_ip LIMIT 1"
0673d1b0 32
9068dba1 33 ret = self.db.get(query, addr)
0673d1b0 34
9068dba1
MT
35 if ret:
36 return ret.asn
0673d1b0 37
9068dba1
MT
38 def get_all(self, addr):
39 location = self.get_location(addr)
0673d1b0 40
9068dba1
MT
41 if location:
42 location["asn"] = self.get_asn(addr)
940227cb 43
9068dba1 44 return location
119f55d7 45
9068dba1
MT
46 _countries = {
47 "A1" : "Anonymous Proxy",
48 "A2" : "Satellite Provider",
49 "AP" : "Asia/Pacific Region",
50 "EU" : "Europe",
51 }
119f55d7 52
9068dba1 53 def get_country_name(self, code):
119f55d7
MT
54 # Return description of some exceptional codes.
55 try:
9068dba1 56 return self._countries[code]
119f55d7
MT
57 except KeyError:
58 pass
59
9068dba1
MT
60 country = countries.get_by_code(code)
61 if not country:
62 return code
940227cb 63
9068dba1 64 return country