使用python根据ip获取目标地理位置信息
Posted PerilongGideon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用python根据ip获取目标地理位置信息相关的知识,希望对你有一定的参考价值。
信息安全很重要,你的地理位置可能暴露了!!!
使用python和GeoLite2获取目标的地理位置
1 #! /usr/bin/env python 2 #-*- coding:utf-8 -*- 3 4 \'\'\' 5 Created on 2019年12月8日 6 7 @author: Admin 8 \'\'\' 9 10 from copy import copy 11 import optparse 12 import re 13 14 import geoip2.database 15 16 17 reader = geoip2.database.Reader(\'GeoLite2-City.mmdb\') 18 19 # 查询IP地址对应的物理地址 20 def ip_get_location(ip_address): 21 # 载入指定IP相关数据 22 response = reader.city(ip_address) 23 24 #读取国家代码 25 Country_IsoCode = response.country.iso_code 26 #读取国家名称 27 Country_Name = response.country.name 28 #读取国家名称(中文显示) 29 Country_NameCN = response.country.names[\'zh-CN\'] 30 #读取州(国外)/省(国内)名称 31 Country_SpecificName = response.subdivisions.most_specific.name 32 #读取州(国外)/省(国内)代码 33 Country_SpecificIsoCode = response.subdivisions.most_specific.iso_code 34 #读取城市名称 35 City_Name = response.city.name 36 #读取邮政编码 37 City_PostalCode = response.postal.code 38 #获取纬度 39 Location_Latitude = response.location.latitude 40 #获取经度 41 Location_Longitude = response.location.longitude 42 43 if(Country_IsoCode == None): 44 Country_IsoCode = "None" 45 if(Country_Name == None): 46 Country_Name = "None" 47 if(Country_NameCN == None): 48 Country_NameCN = "None" 49 if(Country_SpecificName == None): 50 Country_SpecificName = "None" 51 if(Country_SpecificIsoCode == None): 52 Country_SpecificIsoCode = "None" 53 if(City_Name == None): 54 City_Name = "None" 55 if(City_PostalCode == None): 56 City_PostalCode = "None" 57 if(Location_Latitude == None): 58 Location_Latitude = "None" 59 if(Location_Longitude == None): 60 Location_Longitude = "None" 61 62 print(\'================Start===================\') 63 print(\'[*] Target: \' + ip_address + \' GeoLite2-Located \') 64 print(u\' [+] 国家编码: \' + Country_IsoCode) 65 print(u\' [+] 国家名称: \' + Country_Name) 66 print(u\' [+] 国家中文名称: \' + Country_NameCN) 67 print(u\' [+] 省份或州名称: \' + Country_SpecificName) 68 print(u\' [+] 省份或州编码: \' + Country_SpecificIsoCode) 69 print(u\' [+] 城市名称 : \' + City_Name) 70 print(u\' [+] 城市邮编 : \' + City_PostalCode) 71 print(u\' [+] 纬度: \' + str(Location_Latitude)) 72 print(u\' [+] 经度 : \' + str(Location_Longitude)) 73 print(\'===============End======================\') 74 75 # 检验和处理ip地址 76 def seperate_ip(ip_address): 77 ip_match = r"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[1-9]|0?[1-9]0)\\.)(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){2}(?:25[0-4]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[1-9]|0?[1-9]0)$" 78 ip_match_list = r"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[1-9]|0?[1-9]0)\\.)(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){2}(?:25[0-4]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[1-9])-(?:25[0-4]|2[0-4][0-9]|1[0-9][0-9]|0?[0-9]?[1-9]|0?[1-9]0)$" 79 80 if re.match(ip_match, ip_address): 81 try: 82 ip_get_location(ip_address) 83 except Exception as e: 84 print e 85 elif re.match(ip_match_list, ip_address): 86 ip_start = ip_address.split(\'-\')[0].split(\'.\')[3] 87 ip_end = ip_address.split(\'-\')[1] 88 # 如果ip地址范围一样,则直接执行 89 if(ip_start == ip_end): 90 try: 91 seperate_ip(ip_address.split(\'-\')[0]) 92 except Exception as e: 93 print e 94 elif ip_start > ip_end: 95 print \'the value of ip, that you input, has been wrong! try again!\' 96 exit(0) 97 else: 98 ip_num_list = ip_address.split(\'-\')[0].split(\'.\') 99 ip_num_list.pop() 100 for ip_last in range(int(ip_start), int(ip_end)+1): 101 ip_add = \'.\'.join(ip_num_list)+\'.\'+str(ip_last) 102 try: 103 ip_get_location(ip_add) 104 except Exception as e: 105 print e 106 else: 107 print \'Wrong type of ip address!\' 108 print \'100.8.11.58 100.8.11.58-100 alike!\' 109 110 # 主方法数体 111 def main(): 112 parser = optparse.OptionParser(\'Usage%prog -i <single ip address> -I <multi ip address> \\n \\n{ Egg: python getIpLocation.py -i(I) 100.8.11.58(100.8.11.58-100) }\') 113 parser.add_option(\'-i\', dest=\'SIp\',type=\'string\', help=\'specify pcap filename\') 114 parser.add_option(\'-I\', dest=\'MIp\',type=\'string\', help=\'specify pcap filename\') 115 (options, args) = parser.parse_args() 116 if options.SIp == None and options.MIp == None: 117 print (parser.usage) 118 exit(0) 119 ip_address = options.SIp 120 ip_address_multi = options.MIp 121 if ip_address==None: 122 seperate_ip(ip_address_multi) 123 else: 124 seperate_ip(ip_address) 125 126 if __name__ == \'__main__\': 127 main()
结果:
以上是关于使用python根据ip获取目标地理位置信息的主要内容,如果未能解决你的问题,请参考以下文章