| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | # -*- coding: utf-8 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2016-02-17 18:15:04 +01:00
										 |  |  | import sys | 
					
						
							|  |  |  | import socket | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | from iptogeo import IPToGeo, IPToGeoException | 
					
						
							| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | TIMEOUT = None | 
					
						
							|  |  |  | # TIMEOUT = 5.0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-17 18:15:04 +01:00
										 |  |  | iptogeo = IPToGeo(timeout=TIMEOUT, family=socket.AF_INET6, remote_addr='::1') | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | def get_random_ip_v4(): | 
					
						
							|  |  |  |     ip = '%d.%d.%d.%d'  % \ | 
					
						
							|  |  |  |         (ord(os.urandom(1)), ord(os.urandom(1)), ord(os.urandom(1)), ord(os.urandom(1))) | 
					
						
							|  |  |  |     return ip | 
					
						
							| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-24 19:17:40 +01:00
										 |  |  | def test_ip(ip, verbose=True, proxy=iptogeo, result=None): | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |         (ipres, country_code) = proxy.ip_to_geo(ip) | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |     except IPToGeoException, e: | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |         if verbose: | 
					
						
							|  |  |  |             print 'Error with IP %s' % (ip) | 
					
						
							|  |  |  |             print e | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |         return | 
					
						
							| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |     if verbose: | 
					
						
							|  |  |  |         if not country_code: | 
					
						
							| 
									
										
										
										
											2016-02-24 19:17:40 +01:00
										 |  |  |             print 'Country code for %s (%s) not found' % (ip, ipres) | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2016-02-24 19:17:40 +01:00
										 |  |  |             print 'Country code for %s (%s) is %s' % (ip, ipres, country_code) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not result is None: | 
					
						
							|  |  |  |         if not country_code: country_code = '' | 
					
						
							|  |  |  |         if result != country_code: | 
					
						
							|  |  |  |             raise Exception('Bad result %s != %s' % (country_code, result)) | 
					
						
							| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | print '#### Coherence test' | 
					
						
							| 
									
										
										
										
											2016-02-24 19:17:40 +01:00
										 |  |  | test_ip('1.5.7.3', result='jp') | 
					
						
							|  |  |  | test_ip('1.5.255.4', result='jp') | 
					
						
							|  |  |  | test_ip('1.6.255.4', result='in') | 
					
						
							|  |  |  | test_ip('2.0.0.0', result='fr') | 
					
						
							|  |  |  | test_ip('127.0.0.1', result='') | 
					
						
							|  |  |  | test_ip('1.55.3.12', result='vn') | 
					
						
							|  |  |  | test_ip('1.57.0.0', result='cn') | 
					
						
							|  |  |  | test_ip('192.168.2.2', result='') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test_ip('2001:600::', result='eu') | 
					
						
							|  |  |  | test_ip('2001:608::00', result='de') | 
					
						
							|  |  |  | test_ip('2001:0660:0000:0000:0000:0000:0000:0000', result='fr') | 
					
						
							|  |  |  | test_ip('2001:670:1234:5678:9abc:def0:1234:5678', result='fi') | 
					
						
							|  |  |  | test_ip('8001::', result='') | 
					
						
							|  |  |  | test_ip('fe80::1a03:73ff:fee9:8705', result='') | 
					
						
							| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | print '#### 5 sockets test' | 
					
						
							|  |  |  | for i in range(0, 6): | 
					
						
							|  |  |  |     print 'Test %d' % (i) | 
					
						
							|  |  |  |     test_ip(get_random_ip_v4(), verbose=False, proxy=IPToGeo(timeout=TIMEOUT)) | 
					
						
							| 
									
										
										
										
											2016-01-31 11:42:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | print '#### 35 sockets test' | 
					
						
							|  |  |  | for i in range(0, 36): | 
					
						
							|  |  |  |     print 'Test %d' % (i) | 
					
						
							|  |  |  |     test_ip(get_random_ip_v4(), verbose=False, proxy=IPToGeo(timeout=TIMEOUT)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print '#### 1 socket heavy test' | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | for i in range(0, 1000): | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  |     print 'Test %d' % (i) | 
					
						
							|  |  |  |     test_ip(get_random_ip_v4(), verbose=False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | print '#### 35 sockets heavy test' | 
					
						
							|  |  |  | geo_proxy = [] | 
					
						
							|  |  |  | for i in range(0, 36): | 
					
						
							|  |  |  |     geo_proxy.append(IPToGeo(timeout=TIMEOUT)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | for i in range(0, 1000): | 
					
						
							|  |  |  |     print 'Test %d' % (i) | 
					
						
							|  |  |  |     for proxy in geo_proxy: | 
					
						
							|  |  |  |         test_ip(get_random_ip_v4(), verbose=False, proxy=proxy) | 
					
						
							| 
									
										
										
										
											2016-02-04 20:39:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | print 'All is OK for me' |