利用Python编写IP地址的物理定位工具

  本工具利用网站https://app.ipgeolocation.io/提供的API对IP地址进行物理定位。

 1 import requests
 2 import sys
 3 import optparse
 4 import ipaddress
 5 
 6 
 7 class IPGeolocation:
 8     def __init__(self) -> None:
 9         self.app_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXx'  #需要在上述网站注册,并获得api key
10         if not self.get_params():
11             self.ip_addr = self.get_my_ip()          #如果用户没有输入参数,表示用户想要查询本机的物理位置
12         else:
13 
14             self.ip_addr = self.get_params()
15         print("[-] Start to geolocate IP address: %s" % self.ip_addr)
16         self.banner()
17     
18     def banner(self):
19         banner= """
20                 **************************************************
21 
22                 **********IP GeoLocation Tool by Jason Wong*******        
23 
24                 ************************************************** 
26               
27         """
28         print(banner)
29     
30     
31     def check_ip_valid(self, ip):
32         try:
33             ipaddress.ip_address(ip)                    #对用户输入的参数进行合法性判断
34         except:
35             print("[-] Please input correct ip address")
36             sys.exit(0)
37 
38     def get_params(self):
39         parser = optparse.OptionParser('Usage: <Program> -i ip address')
40         parser.add_option('-i', '--ip', dest='ip', type='string', help='Specify IP address to geolocate')
41         options, args = parser.parse_args()
42         if options.ip is None:
43             return None
44         else:
45             self.check_ip_valid(options.ip)          
46 
47             return options.ip
48 
49     def get_my_ip(self):                    #如果用户没有输入参数,则首先需要获得本机的IP地址
50         """ 'https://api.ipgeolocation.io/getip' { "ip": "1.1.1.1" }"""
51         try:
52             params = {"ip": "1.1.1.1"}
53             response = requests.get(url='https://api.ipgeolocation.io/getip', params=params)
54             return response.json()['ip']
55         except Exception as e:
56             print(e)
57             sys.exit(0)
58     
59     def geo_locate(self):
60         """"curl 'https://api.ipgeolocation.io/ipgeo?apiKey=API_KEY&ip=8.8.8.8'"""
61         try:
62             url = 'https://api.ipgeolocation.io/ipgeo'
63             params = {
64                 'apiKey': self.app_key,
65                 'ip': self.ip_addr
66             }
67             response = requests.get(url=url, params=params).json()
68             print("\tThe IP address: %s\n" % self.ip_addr)
69             print(
70                 """
71                     Information as follows:
72                     Country:   %s
73                     Province:  %s
74                     City:      %s
75                     Latitude:  %s
76                     Longtitude:%s
77                     ISP:       %s
78                 """ %(response['country_name'], response['state_prov'],response['city'], response['latitude'], response['longitude'], response['isp'])
79             )
80         except Exception as e:
81             print(e)
82             sys.exit(0)
83 
84 if __name__ == '__main__':
85     iper = IPGeolocation()
86     iper.geo_locate()

  运行效果如下所示:

# python ip_geolocation.py
[-] Start to geolocate IP address: 103.142.208.238

                **************************************************

                **********IP GeoLocation Tool by Jason Wong*******

                **************************************************

        The IP address: 103.142.208.238


                    Information as follows:
                    Country:   Cambodia
                    Province:
                    City:      Phnom Penh
                    Latitude:  11.57590
                    Longtitude:104.89940
                    ISP:       Mega Truenet Communication Co., Ltd.

 

posted @ 2022-05-23 10:59  Jason_huawen  阅读(341)  评论(0编辑  收藏  举报