• 使用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> 
      
    { 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()

    结果:

  • 相关阅读:
    6. (在第五步的基础上展开)实现模板推送发送
    5. (全局唯一接口调用凭据)获取Access token
    3. openid的获取
    2. 验证服务器地址的有效性
    Java后端开发规范
    4. (自定义菜单和删除全部菜单)Springboot读取静态json文件
    Docker私有仓库搭建与部署
    Docker容器基础学习一
    运维日志切割--logrotate
    zookeeper学习
  • 原文地址:https://www.cnblogs.com/perilong16/p/12008715.html
Copyright © 2020-2023  润新知