list2form : gestion des erreurs et des petits fichiers (merci cgi.py…)
[progfou.git] / outils / ip2cc
CommitLineData
8a7d5f6f
P
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3# Depends: python-geoip
4import sys
5import re
6try:
7 import GeoIP
8except:
9 print "Support GeoIP non disponible. Installer le paquet 'python-geoip'."
10 sys.exit(1)
11
e8956637 12PATTERN_IP4 = r'\b(\d{1,3}\.\d{1,3}\.)\d{1,3}\.\d{1,3}\b'
8a7d5f6f
P
13#REPLACEMENT_IP4 = '<%(cc)s>%(ip4)s'
14REPLACEMENT_IP4 = '<\033[1;31m%(cc)s\033[m>\033[34m%(ip4)s\033[m'
15
e8956637
P
16AUF_NETWORKS = {
17 '10.1.': 'AD', '10.2.': 'AE', '10.3.': 'AF', '10.4.': 'AG',
18 '10.5.': 'AI', '10.6.': 'AL', '10.7.': 'AM', '10.8.': 'AN',
19 '10.9.': 'AO', '10.10.': 'AQ', '10.11.': 'AR', '10.12.': 'AS',
20 '10.13.': 'AT', '10.14.': 'AU', '10.15.': 'AW', '10.16.': 'AZ',
21 '10.17.': 'BA', '10.18.': 'BB', '10.19.': 'BD', '10.20.': 'BE',
22 '10.21.': 'BF', '10.22.': 'BG', '10.23.': 'BH', '10.24.': 'BI',
23 '10.25.': 'BJ', '10.26.': 'BM', '10.27.': 'BN', '10.28.': 'BO',
24 '10.29.': 'BR', '10.30.': 'BS', '10.31.': 'BT', '10.32.': 'BV',
25 '10.33.': 'BW', '10.34.': 'BY', '10.35.': 'BZ', '10.36.': 'CA',
26 '10.37.': 'CC', '10.38.': 'CD', '10.39.': 'CF', '10.40.': 'CG',
27 '10.41.': 'CH', '10.42.': 'CI', '10.43.': 'CK', '10.44.': 'CL',
28 '10.45.': 'CM', '10.46.': 'CN', '10.47.': 'CO', '10.48.': 'CR',
29 '10.49.': 'CU', '10.50.': 'CV', '10.51.': 'CX', '10.52.': 'CY',
30 '10.53.': 'CZ', '10.54.': 'DE', '10.55.': 'DJ', '10.56.': 'DK',
31 '10.57.': 'DM', '10.58.': 'DO', '10.59.': 'DZ', '10.60.': 'EC',
32 '10.61.': 'EE', '10.62.': 'EG', '10.63.': 'EH', '10.64.': 'ER',
33 '10.65.': 'ES', '10.66.': 'ET', '10.67.': 'FI', '10.68.': 'FJ',
34 '10.69.': 'FK', '10.70.': 'FM', '10.71.': 'FO', '10.72.': 'FR',
35 '10.73.': 'GA', '10.74.': 'GB', '10.75.': 'GD', '10.76.': 'GE',
36 '10.77.': 'GF', '10.78.': 'GH', '10.79.': 'GI', '10.80.': 'GL',
37 '10.81.': 'GM', '10.82.': 'GN', '10.83.': 'GP', '10.84.': 'GQ',
38 '10.85.': 'GR', '10.86.': 'GS', '10.87.': 'GT', '10.88.': 'GU',
39 '10.89.': 'GW', '10.90.': 'GY', '10.91.': 'HK', '10.92.': 'HM',
40 '10.93.': 'HN', '10.94.': 'HR', '10.95.': 'HT', '10.96.': 'HU',
41 '10.97.': 'ID', '10.98.': 'IE', '10.99.': 'IL', '10.100.': 'IN',
42 '10.101.': 'IO', '10.102.': 'IQ', '10.103.': 'IR', '10.104.': 'IS',
43 '10.105.': 'IT', '10.106.': 'JM', '10.107.': 'JO', '10.108.': 'JP',
44 '10.109.': 'KE', '10.110.': 'KG', '10.111.': 'KH', '10.112.': 'KI',
45 '10.113.': 'KM', '10.114.': 'KN', '10.115.': 'KP', '10.116.': 'KR',
46 '10.117.': 'KW', '10.118.': 'KY', '10.119.': 'KZ', '10.120.': 'LA',
47 '10.121.': 'LB', '10.122.': 'LC', '10.123.': 'LI', '10.124.': 'LK',
48 '10.125.': 'LR', '10.126.': 'LS', '10.127.': 'LT', '10.128.': 'LU',
49 '10.129.': 'LV', '10.130.': 'LY', '10.131.': 'MA', '10.132.': 'MC',
50 '10.133.': 'MD', '10.134.': 'MG', '10.135.': 'MH', '10.136.': 'MK',
51 '10.137.': 'ML', '10.138.': 'MM', '10.139.': 'MN', '10.140.': 'MO',
52 '10.141.': 'MP', '10.142.': 'MQ', '10.143.': 'MR', '10.144.': 'MS',
53 '10.145.': 'MT', '10.146.': 'MU', '10.147.': 'MV', '10.148.': 'MW',
54 '10.149.': 'MX', '10.150.': 'MY', '10.151.': 'MZ', '10.152.': 'NA',
55 '10.153.': 'NC', '10.154.': 'NE', '10.155.': 'NF', '10.156.': 'NG',
56 '10.157.': 'NI', '10.158.': 'NL', '10.159.': 'NO', '10.160.': 'NP',
57 '10.161.': 'NR', '10.162.': 'NU', '10.163.': 'NZ', '10.164.': 'OM',
58 '10.165.': 'PA', '10.166.': 'PE', '10.167.': 'PF', '10.168.': 'PG',
59 '10.169.': 'PH', '10.170.': 'PK', '10.171.': 'PL', '10.172.': 'PM',
60 '10.173.': 'PN', '10.174.': 'PR', '10.175.': 'PS', '10.176.': 'PT',
61 '10.177.': 'PW', '10.178.': 'PY', '10.179.': 'QA', '10.180.': 'RE',
62 '10.181.': 'RO', '10.182.': 'RU', '10.183.': 'RW', '10.184.': 'SA',
63 '10.185.': 'SB', '10.186.': 'SC', '10.187.': 'SD', '10.188.': 'SE',
64 '10.189.': 'SG', '10.190.': 'SH', '10.191.': 'SI', '10.192.': 'SJ',
65 '10.193.': 'SK', '10.194.': 'SL', '10.195.': 'SM', '10.196.': 'SN',
66 '10.197.': 'SO', '10.198.': 'SR', '10.199.': 'ST', '10.200.': 'SV',
67 '10.201.': 'SY', '10.202.': 'SZ', '10.203.': 'TC', '10.204.': 'TD',
68 '10.205.': 'TF', '10.206.': 'TG', '10.207.': 'TH', '10.208.': 'TJ',
69 '10.209.': 'TK', '10.210.': 'TM', '10.211.': 'TN', '10.212.': 'TO',
70 '10.213.': 'TP', '10.214.': 'TR', '10.215.': 'TT', '10.216.': 'TV',
71 '10.217.': 'TW', '10.218.': 'TZ', '10.219.': 'UA', '10.220.': 'UG',
72 '10.221.': 'UM', '10.222.': 'US', '10.223.': 'UY', '10.224.': 'UZ',
73 '10.225.': 'VA', '10.226.': 'VC', '10.227.': 'VE', '10.228.': 'VG',
74 '10.229.': 'VI', '10.230.': 'VN', '10.231.': 'VU', '10.232.': 'WF',
75 '10.233.': 'WS', '10.234.': 'YE', '10.235.': 'YT', '10.236.': 'YU',
76 '10.237.': 'ZA', '10.238.': 'ZM', '10.239.': 'ZW',
77}
78
8a7d5f6f
P
79gi = GeoIP.new(GeoIP.GEOIP_MEMORY_CACHE)
80
81def ip4_to_cc(matchobj):
82 ip4 = matchobj.group(0)
e8956637
P
83 prefix = matchobj.group(1)
84 cc = AUF_NETWORKS.get(prefix, None)
85 if cc is None:
86 cc = gi.country_code_by_addr(ip4)
87 if cc is None:
88 cc = '??'
8a7d5f6f
P
89 return REPLACEMENT_IP4 % {'cc': cc, 'ip4': ip4}
90
91pattern = re.compile(PATTERN_IP4, re.MULTILINE)
92sys.stdout.write(re.sub(pattern, ip4_to_cc, sys.stdin.read()))