]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
638e9782 MT |
3 | import re |
4 | ||
11347e46 | 5 | from . import countries |
940227cb | 6 | |
11347e46 | 7 | from .misc import Object |
940227cb | 8 | |
9068dba1 MT |
9 | class GeoIP(Object): |
10 | def guess_address_family(self, addr): | |
11 | if ":" in addr: | |
12 | return 6 | |
940227cb | 13 | |
9068dba1 | 14 | return 4 |
65afea2f | 15 | |
9068dba1 MT |
16 | def get_country(self, addr): |
17 | ret = self.get_all(addr) | |
940227cb | 18 | |
9068dba1 MT |
19 | if ret: |
20 | return ret.country | |
119f55d7 | 21 | |
9068dba1 | 22 | def get_location(self, addr): |
5488a9f4 MT |
23 | query = "SELECT * FROM geoip \ |
24 | WHERE %s BETWEEN start_ip AND end_ip LIMIT 1" | |
0673d1b0 | 25 | |
c89084ce | 26 | return self.db.get(query, addr) |
0673d1b0 | 27 | |
9068dba1 | 28 | def get_asn(self, addr): |
5488a9f4 MT |
29 | query = "SELECT asn FROM geoip_asn \ |
30 | WHERE %s BETWEEN start_ip AND end_ip LIMIT 1" | |
0673d1b0 | 31 | |
9068dba1 | 32 | ret = self.db.get(query, addr) |
0673d1b0 | 33 | |
9068dba1 MT |
34 | if ret: |
35 | return ret.asn | |
0673d1b0 | 36 | |
9068dba1 MT |
37 | def get_all(self, addr): |
38 | location = self.get_location(addr) | |
0673d1b0 | 39 | |
9068dba1 MT |
40 | if location: |
41 | location["asn"] = self.get_asn(addr) | |
940227cb | 42 | |
9068dba1 | 43 | return location |
119f55d7 | 44 | |
9068dba1 MT |
45 | _countries = { |
46 | "A1" : "Anonymous Proxy", | |
47 | "A2" : "Satellite Provider", | |
48 | "AP" : "Asia/Pacific Region", | |
49 | "EU" : "Europe", | |
50 | } | |
119f55d7 | 51 | |
9068dba1 | 52 | def get_country_name(self, code): |
df731215 | 53 | return countries.get_name(code) |