激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python 實現全球IP歸屬地查詢工具

python 實現全球IP歸屬地查詢工具

2021-08-15 11:45月為暮 Python

這篇文章主要介紹了python 實現全球IP歸屬地查詢工具的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
# 寫在前面,這篇文章的原創作者是Charles我只是在他這個程序的基礎上邊進行加工,另外有一些自己的改造
# 并都附上了注釋和我自己的理解,這也是我一個學習的過程。
# 附上大佬的GitHub地址:https://github.com/CharlesPikachu/Tools
 
'''
Function:
  根據IP地址查其對應的地理信息
Author:
  Charles
微信公眾號:
  Charles的皮卡丘
'''
import IPy
import time
import random
import hashlib
import argparse
import requests
 
 
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
 
 
 
def getaliIP(ip):
  # 這里使用ali的IP地址查詢功能。
  # https://market.aliyun.com/products/?keywords=ip%E5%BD%92%E5%B1%9E%E5%9C%B0
  # 需要自己去這個網址注冊賬號,然后進行調用。
  # 這里我們先進行定義url
  host = 'https://ips.market.alicloudapi.com'
  path = '/iplocaltion'
  method = "GET"
  appcode = '填寫你自己的xxx'
  url = host + path + '?ip=' + ip
  # 定義頭部。
  headers = {"Authorization": 'APPCODE ' + appcode}
  try:
   # 進行獲取調用結果。
   rep = requests.get(url, headers=headers)
  except:
   return 'url參數錯誤'
  # 判斷是否調用成功。如果調用成功就接著進行下邊的動作。
  httpStatusCode = rep.status_code
  if httpStatusCode == 200:
   # 轉換成json格式
   data = rep.json()
   # 然后獲取其中的參數。
   ''''
   # 是以下邊這種格式進行返回的。
   {
     "code": 100,
     "message": "success",
     "ip": "110.188.234.66",
     "result": {
          "en_short": "CN", // 英文簡稱
     "en_name": "China", // 歸屬國家英文名稱
   "nation": "中國", // 歸屬國家
   "province": "四川省", // 歸屬省份
   "city": "綿陽市", // 歸屬城市
   "district": "涪城區", // 歸屬縣區
   "adcode": 510703, // 歸屬地編碼
   "lat": 31.45498, // 經度
   "lng": 104.75708 // 維度
   }
   }'''
   result1 = data.get('result')
   city = result1['city']
   province = result1['province']
   nation = result1['nation']
   district = result1['district']
   latitude = result1['lat']
   longitude = result1['lng']
   # 返回我們需要的結果。
   result = '-' * 50 + '\n' + \
       '''[ali.com查詢結果-IP]: %s\n經緯度: (%s, %s)\n國家: %s\n地區: %s\n城市: %s\n''' % (
       ip, longitude, latitude, nation, province, city) \
       + '-' * 50
  else:
   httpReason = rep.headers['X-Ca-Error-Message']
   if (httpStatusCode == 400 and httpReason == 'Invalid Param Location'):
     return "參數錯誤"
   elif (httpStatusCode == 400 and httpReason == 'Invalid AppCode'):
     return "AppCode錯誤"
   elif (httpStatusCode == 400 and httpReason == 'Invalid Url'):
     return "請求的 Method、Path 或者環境錯誤"
   elif (httpStatusCode == 403 and httpReason == 'Unauthorized'):
     return "服務未被授權(或URL和Path不正確)"
   elif (httpStatusCode == 403 and httpReason == 'Quota Exhausted'):
     return "套餐包次數用完"
   elif (httpStatusCode == 500):
     return "API網關錯誤"
   else:
     return "參數名錯誤 或 其他錯誤" + httpStatusCode + httpReason
 
  return result
 
'''淘寶API'''
def getTaobaoIP(ip):
  # 請求淘寶獲取IP位置的API接口,但是現在有些不是很好用了。查不出來了。
  # 看了看接口需要進行傳入秘鑰
  url = 'http(s)://ips.market.alicloudapi.com/iplocaltion'
  # 使用get方法進行請求。
  res = requests.get(url+ip, headers=headers)
  # 然后進行解析參數。
  data = res.json().get('data')
  print(res.json)
  if data is None:
   return '[淘寶API查詢結果-IP]: %s\n無效IP' % ip
  result = '-'*50 + '\n' + \
  '''[淘寶API查詢結果-IP]: %s\n國家: %s\n地區: %s\n城市: %s\n''' % (ip, data.get('country'), data.get('region'), data.get('city')) \
  + '-'*50
  return result
 
 
'''ip-api.com(很不準)'''
def getIpapiIP(ip):
  url = 'http://ip-api.com/json/'
  res = requests.get(url+ip, headers=headers)
  data = res.json()
  yd = youdao()
  city = yd.translate(data.get('city'))[0][0]['tgt']
  country = yd.translate(data.get('country'))[0][0]['tgt']
  region_name = yd.translate(data.get('regionName'))[0][0]['tgt']
  latitude = data.get('lat')
  longitude = data.get('lon')
  result = '-'*50 + '\n' + \
  '''[ip-api.com查詢結果-IP]: %s\n經緯度: (%s, %s)\n國家: %s\n地區: %s\n城市: %s\n''' % (ip, longitude, latitude, country, region_name, city) \
  + '-'*50
  return result
 
 
'''ipstack.com'''
def getIpstackIP(ip):
  # 定義url
  url = 'http://api.ipstack.com/{}?access_key=1bdea4d0bf1c3bf35c4ba9456a357ce3'
  res = requests.get(url.format(ip), headers=headers)
  data = res.json()
  # 實例化一個有道翻譯的類。
  yd = youdao()
  # 調用翻譯函數。獲取翻譯的值。
  continent_name = yd.translate(data.get('continent_name'))[0][0]['tgt']
  country_name = yd.translate(data.get('country_name'))[0][0]['tgt']
  region_name = yd.translate(data.get('region_name'))[0][0]['tgt']
  city = yd.translate(data.get('city'))[0][0]['tgt']
  # 獲取經緯度。
  latitude = data.get('latitude')
  longitude = data.get('longitude')
  result = '-'*50 + '\n' + \
  '''[ipstack.com查詢結果-IP]: %s\n經緯度: (%s, %s)\n板塊: %s\n國家: %s\n地區: %s\n城市: %s\n''' % (ip, longitude, latitude, continent_name, country_name, region_name, city) \
  + '-'*50
  return result
 
 
'''IP地址有效性驗證'''
def isIP(ip):
  try:
   IPy.IP(ip)
   return True
  except:
   return False
 
 
'''
Function:
  有道翻譯類,進行翻譯上邊我們查詢結果的返回值。
'''
class youdao():
  def __init__(self):
   # 這里我們需要使用post方法進行調用接口。
   self.headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
   }
 
   self.data = {
        'i': 'hello',
        'action': 'FY_BY_CLICKBUTTION',
        'bv': 'e2a78ed30c66e16a857c5b6486a1d326',
        'client': 'fanyideskweb',
        'doctype': 'json',
        'from': 'AUTO',
        'keyfrom': 'fanyi.web',
        'salt': '15532627491296',
        'sign': 'ee5b85b35c221d9be7437297600c66df',
        'smartresult': 'dict',
        'to': 'AUTO',
        'ts': '1553262749129',
        'typoResult': 'false',
        'version': '2.1'
        }
   # 有道翻譯調用接口的url
   self.url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
   # http: // fanyi.youdao.com / translate?smartresult = dict & smartresult = rule & sessionFrom =
  # 進行翻譯。
  def translate(self, word):
   # 先判斷單詞是否為空。
   if word is None:
     return [word]
   # 隨機生成一個時間。
   t = str(time.time()*1000 + random.randint(1,10))
   t = str(time.time()*1000 + random.randint(1, 10))
   # 傳入我們需要翻譯的單詞和其他參數。
   self.data['i'] = word
   self.data['salt'] = t
   sign = 'fanyideskweb' + word + t + '6x(ZHw]mwzX#u0V7@yfwK'
   # 這里需要哈希一下。
   self.data['sign'] = hashlib.md5(sign.encode('utf-8')).hexdigest()
   # 進行post方法調用接口,并獲取我們需要的參數。
   res = requests.post(self.url, headers=self.headers, data=self.data)
   # 返回翻譯的結果。
   return res.json()['translateResult']
 
 
'''主函數'''
def main(ip):
  separator = '*' * 30 + 'IPLocQuery' + '*' * 30
  # 首先判斷IP地址是否合法。
  if isIP(ip):
   # 然后分別調用幾個接口進行查詢。
   print(separator)
   print(getaliIP(ip))
   print(getIpstackIP(ip))
   print(getIpapiIP(ip))
   print('*' * len(separator))
  else:
   print(separator + '\n[Error]: %s --> 無效IP地址...\n' % ip + '*' * len(separator))
  
 
if __name__ == '__main__':
  # 獲取終端輸入的入參。
  parser = argparse.ArgumentParser(description="Query geographic information based on IP address.")
  # 可選參數,代表著文件的名字,里邊存放著IP之地。
  parser.add_argument('-f', dest='filename', help='File to be queried with one ip address per line')
  # 可選參數,代表著我們需要查詢的IP地址。
  parser.add_argument('-ip', dest='ipaddress', help='Single ip address to be queried')
  args = parser.parse_args()
  # 獲取終端輸入的參數。
  ip = args.ipaddress
  filename = args.filename
  # 判斷終端是否有進行輸入參數。
  if ip:
   main(ip)
  if filename:
   with open(filename) as f:
     # 獲取文件中的所有IP地址,存放成一個列表的形式。
     ips = [ip.strip('\n') for ip in f.readlines()]
   for ip in ips:
     main(ip)

PS:推薦一款在線工具ip地址查詢:https://tool.zzvips.com/t/ip/

以上就是python 實現全球IP歸屬地查詢工具的詳細內容,更多關于python ip歸屬地查詢的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/cong12586/p/14143727.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄www片 | 免费国产视频在线观看 | 96视频在线免费观看 | 久久大胆视频 | 中文字幕亚洲情99在线 | 色黄网站在线观看 | 国产一级淫片免费看 | 播色网 | 在线成人看片 | 99精品欧美一区二区 | 成人免费一区二区三区视频网站 | 日韩黄色精品 | 免费久久精品 | 国内毛片视频 | 国产一级淫片在线观看 | 精品国产专区 | 婷婷中文字幕一区二区三区 | av在线免费看网站 | 成人在线精品视频 | 污黄视频在线观看 | 精国品产一区二区三区有限公司 | 亚洲码无人客一区二区三区 | 一级毛片在线免费观看视频 | 久久99在线| 黄色网址在线播放 | 日韩字幕在线观看 | 久久精品日本一区 | 激情亚洲一区二区三区 | 欧美18—19sex性hd按摩 | 日韩中字在线 | 欧美日韩亚洲精品一区二区三区 | av不卡免费在线 | 日韩在线观看电影 | 日本成人一二三区 | 美女黄色毛片免费看 | 免费中文视频 | 色婷婷av一区二区三区久久 | 狠狠ri | 午夜啪视频 | 久久久免费观看完整版 | 国内自拍网址 |