]>
Commit | Line | Data |
---|---|---|
940227cb MT |
1 | #!/usr/bin/python |
2 | ||
9068dba1 | 3 | import IPy |
638e9782 MT |
4 | import re |
5 | ||
9068dba1 | 6 | import countries |
940227cb | 7 | |
9068dba1 | 8 | from misc import Object |
940227cb | 9 | |
9068dba1 MT |
10 | class 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 | |
f28bd37a MT |
27 | ret = self.db.get(query, addr) |
28 | ||
29 | if ret: | |
30 | if ret.city: | |
31 | ret.city = ret.city.strip() | |
32 | ||
33 | if ret.postal_code: | |
34 | ret.postal_code = ret.postal_code.strip() | |
35 | ||
36 | return ret | |
0673d1b0 | 37 | |
9068dba1 | 38 | def get_asn(self, addr): |
5488a9f4 MT |
39 | query = "SELECT asn FROM geoip_asn \ |
40 | WHERE %s BETWEEN start_ip AND end_ip LIMIT 1" | |
0673d1b0 | 41 | |
9068dba1 | 42 | ret = self.db.get(query, addr) |
0673d1b0 | 43 | |
9068dba1 MT |
44 | if ret: |
45 | return ret.asn | |
0673d1b0 | 46 | |
9068dba1 MT |
47 | def get_all(self, addr): |
48 | location = self.get_location(addr) | |
0673d1b0 | 49 | |
9068dba1 MT |
50 | if location: |
51 | location["asn"] = self.get_asn(addr) | |
940227cb | 52 | |
9068dba1 | 53 | return location |
119f55d7 | 54 | |
9068dba1 MT |
55 | _countries = { |
56 | "A1" : "Anonymous Proxy", | |
57 | "A2" : "Satellite Provider", | |
58 | "AP" : "Asia/Pacific Region", | |
59 | "EU" : "Europe", | |
60 | } | |
119f55d7 | 61 | |
9068dba1 | 62 | def get_country_name(self, code): |
119f55d7 MT |
63 | # Return description of some exceptional codes. |
64 | try: | |
9068dba1 | 65 | return self._countries[code] |
119f55d7 MT |
66 | except KeyError: |
67 | pass | |
68 | ||
9068dba1 MT |
69 | country = countries.get_by_code(code) |
70 | if not country: | |
71 | return code | |
940227cb | 72 | |
9068dba1 | 73 | return country |