import re
import geoip2.database
from tabulate import tabulate
from matplotlib import pyplot as plt reader = geoip2.database.Reader('GeoLite2-Country.mmdb')
res = []
# 查询IP地址对应的物理地址
def ip_get_location(ip_address):
try:
response = reader.country(ip_address)
except:
Country_Code = 'Null'
else:
Country_Code = response.country.iso_code res.append(Country_Code) # 检验和处理ip地址
def seperate_ip(ip):
compile_ip=re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
if compile_ip.match(ip):
ip_get_location(ip)
else:
print(ip)
print('Wrong type of ip address!') def get_counts(sequence):
counts = {}
for x in sequence:
if x in counts:
counts[x] += 1
else:
counts[x] = 1
return counts logfile = ''
filepath = ''
suffix = ['apk','AppImage','deb','dmg','exe','msi','zip'] with open(logfile,'r') as file:
while True:
line = file.readline()
if line == '':
break
# 判断是否为下载
for x in suffix:
if line.find(filepath) != -1 and line.find(x) != -1 and line.find('blockmap') == -1:
# 过滤出源IP
ip = str(line.split()[0].strip())
# 解析IP位置
seperate_ip(ip) Country_Map_Continent = {'AE': 'APAC', 'AF': 'EU', 'AU': 'APAC', 'AZ': 'APAC', 'BD': 'APAC', 'BH': 'APAC', 'BN': 'APAC', 'BT': 'APAC', 'CC': 'APAC', 'CK': 'APAC', 'CN': 'APAC', 'CX': 'APAC', 'FJ': 'APAC', 'FM': 'APAC', 'GE': 'APAC', 'GU': 'APAC', 'HK': 'APAC', 'ID': 'APAC', 'IL': 'APAC', 'IN': 'APAC', 'IO': 'APAC', 'IQ': 'APAC', 'IR': 'APAC', 'JO': 'APAC', 'JP': 'APAC', 'KG': 'APAC', 'KH': 'APAC', 'KI': 'APAC', 'KP': 'APAC', 'KR': 'APAC', 'KW': 'APAC', 'KZ': 'APAC', 'LA': 'APAC', 'LB': 'APAC', 'LK': 'APAC', 'MH': 'APAC', 'MM': 'APAC', 'MN': 'APAC', 'MO': 'APAC', 'MP': 'APAC', 'MV': 'APAC', 'MY': 'APAC', 'NC': 'APAC', 'NF': 'APAC', 'NP': 'APAC', 'NR': 'APAC', 'NU': 'APAC', 'NZ': 'APAC', 'OM': 'APAC', 'PF': 'APAC', 'PG': 'APAC', 'PH': 'APAC', 'PK': 'APAC', 'PN': 'APAC', 'PS': 'APAC', 'PW': 'APAC', 'QA': 'APAC', 'RU': 'APAC', 'SB': 'APAC', 'SG': 'APAC', 'SY': 'APAC', 'TH': 'APAC', 'TJ': 'APAC', 'TK': 'APAC', 'TL': 'APAC', 'TM': 'APAC', 'TO': 'APAC', 'TR': 'APAC', 'TV': 'APAC', 'TW': 'APAC', 'UM': 'APAC', 'UZ': 'APAC', 'VN': 'APAC', 'VU': 'APAC', 'WF': 'APAC', 'WS': 'APAC', 'YE': 'APAC', 'AG': 'US', 'AI': 'US', 'AW': 'US', 'BB': 'US', 'BL': 'US', 'BM': 'US', 'BQ': 'US', 'BS': 'US', 'BZ': 'US', 'CA': 'US', 'CR': 'US', 'CU': 'US', 'CW': 'US', 'DM': 'US', 'DO': 'US', 'GD': 'US', 'GL': 'US', 'GP': 'US', 'GT': 'US', 'HN': 'US', 'HT': 'US', 'JM': 'US', 'KN': 'US', 'KY': 'US', 'LC': 'US', 'MF': 'US', 'MQ': 'US', 'MS': 'US', 'MX': 'US', 'NI': 'US', 'PA': 'US', 'PM': 'US', 'PR': 'US', 'SV': 'US', 'SX': 'US', 'TC': 'US', 'TT': 'US', 'US': 'US', 'VC': 'US', 'VG': 'US', 'VI': 'US', 'AD': 'EU', 'AL': 'EU', 'AM': 'EU', 'AO': 'EU', 'AT': 'EU', 'AX': 'EU', 'BA': 'EU', 'BE': 'EU', 'BF': 'EU', 'BG': 'EU', 'BI': 'EU', 'BJ': 'EU', 'BW': 'EU', 'BY': 'EU', 'CD': 'EU', 'CF': 'EU', 'CG': 'EU', 'CH': 'EU', 'CI': 'EU', 'CM': 'EU', 'CV': 'EU', 'CY': 'EU', 'CZ': 'EU', 'DE': 'EU', 'DJ': 'EU', 'DK': 'EU', 'DZ': 'EU', 'EE': 'EU', 'EG': 'EU', 'EH': 'EU', 'ER': 'EU', 'ES': 'EU', 'ET': 'EU', 'FI': 'EU', 'FO': 'EU', 'FR': 'EU', 'GA': 'EU', 'GB': 'EU', 'GG': 'EU', 'GH': 'EU', 'GI': 'EU', 'GM': 'EU', 'GN': 'EU', 'GQ': 'EU', 'GR': 'EU', 'GW': 'EU', 'HR': 'EU', 'HU': 'EU', 'IE': 'EU', 'IM': 'EU', 'IS': 'EU', 'IT': 'EU', 'JE': 'EU', 'KE': 'EU', 'KM': 'EU', 'LI': 'EU', 'LR': 'EU', 'LS': 'EU', 'LT': 'EU', 'LU': 'EU', 'LV': 'EU', 'LY': 'EU', 'MA': 'EU', 'MC': 'EU', 'MD': 'EU', 'ME': 'EU', 'MG': 'EU', 'MK': 'EU', 'ML': 'EU', 'MR': 'EU', 'MT': 'EU', 'MU': 'EU', 'MW': 'EU', 'MZ': 'EU', 'NE': 'EU', 'NG': 'EU', 'NL': 'EU', 'NO': 'EU', 'PL': 'EU', 'PT': 'EU', 'RE': 'EU', 'RO': 'EU', 'RS': 'EU', 'RW': 'EU', 'SA':'APAC','SC': 'EU', 'SD': 'EU', 'SE': 'EU', 'SH': 'EU', 'SI': 'EU', 'SJ': 'EU', 'SK': 'EU', 'SL': 'EU', 'SM': 'EU', 'SN': 'EU', 'SO': 'EU', 'SS': 'EU', 'ST': 'EU', 'SZ': 'EU', 'TD': 'EU', 'TG': 'EU', 'TN': 'EU', 'TZ': 'EU', 'UA': 'EU', 'UG': 'EU', 'VA': 'EU', 'YT': 'EU', 'ZA': 'EU', 'ZM': 'EU', 'ZW': 'EU', 'AQ': 'LATAM', 'AR': 'LATAM', 'BO': 'LATAM', 'BR': 'LATAM', 'BV': 'LATAM', 'CL': 'LATAM', 'CO': 'LATAM', 'EC': 'LATAM', 'FK': 'LATAM', 'GF': 'LATAM', 'GS': 'LATAM', 'GY': 'LATAM', 'HM': 'LATAM', 'PE': 'LATAM', 'PY': 'LATAM', 'SR': 'LATAM', 'TF': 'LATAM', 'UY': 'LATAM', 'VE': 'LATAM','XK':'APAC'} ret = [Country_Map_Continent[i] if i in Country_Map_Continent else i for i in res] d = get_counts(ret)
l = []
for k,v in d.items():
l.append([k,v]) #print(tabulate(l, headers=["区域","下载量 "]))
f = open('result','w+')
print(tabulate(l, headers=["区域","下载量 "]),file = f)
f.close() # 画一张饼图 #调节图形大小,宽,高
plt.figure(figsize=(6,9))
#定义饼状图的标签,标签是列表
labels = [u'亚太地区',u'北美地区',u'欧非洲地区',u'拉美地区']
#每个标签占多大,会自动去算百分比
sizes = [d['APAC'],d['US'],d['EU'],d['LATAM']]
colors = ['r','g','b','y']
#将某部分爆炸出来, 使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
#explode = (0.05,0,0,0)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
patches,l_text,p_text = plt.pie(sizes,labels=labels,colors=colors,
labeldistance = 1.1,autopct = '%3.1f%%',shadow = False,
startangle = 90,pctdistance = 0.6) #labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
#shadow,饼是否有阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
#pctdistance,百分比的text离圆心的距离
#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本 #改变文本的大小
#方法是把每一个text遍历。调用set_size方法设置它的属性 for t in l_text:
t.set_size=(30)
for t in p_text:
t.set_size=(20) # 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend()
plt.savefig('pieChart.jpg')
#plt.show()

ip2location.py的更多相关文章

  1. python调用py中rar的路径问题。

    1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...

  2. Python导入其他文件中的.py文件 即模块

    import sys sys.path.append("路径") import .py文件

  3. import renumber.py in pymol

    cp renumber.py /usr/local/lib/python2.7/dist-packages/pymol import renumber or run /path/to/renumber ...

  4. python gettitle.py

    #!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...

  5. 解决 odoo.py: error: option --addons-path: The addons-path 'local-addons/' does not seem to a be a valid Addons Directory!

    情况说明 odoo源文件路径-/odoo-dev/odoo/: 我的模块插件路径 ~/odoo-dev/local-addons/my-module 在my-module中创建了__init__.py ...

  6. caffe机器学习自带图片分类器classify.py实现输出预测结果的概率及caffe的web_demo例子运行实例

    caffe机器学习环境搭建及python接口编译参见我的上一篇博客:机器学习caffe环境搭建--redhat7.1和caffe的python接口编译 1.运行caffe图片分类器python接口 还 ...

  7. 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优

    libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...

  8. MySqlNDB使用自带的ndb_setup.py安装集群

    在用Mysql做集群时,使用Mysql的NDB版本更易于集群的扩展,稳定和数据的实时性. 我们可以使用Mysql自带的工具进行集群安装与管理:ndb_setup.py.位于Mysql的安装目录bin下 ...

  9. 将做好的py文件打包成模块,供别人安装调用

    现在要将写完的3个py文件,打包. 步骤: 1.新建一个文件夹setup(名字随便取),在setup文件夹下,再新建一个文件夹financeapi. 2.将上面4个py文件拷贝至financeapi文 ...

  10. 使用pyInstaller发布PathMerge的exe版本(py转换成exe)

    前言 PathMerge是用python写的一个辅助文件夹合并的小工具,它的特点是不用担心合并后文件会丢失,旧文件会创建副本保存下来,除非你手动删除. 详情见:python开发目录合并小工具 Path ...

随机推荐

  1. AI降临,前端启用面壁计划

    作者:京东零售 郑炳懿 开篇: "在我们有生之年,你觉得会看到AI兵临城下的那一天吗?就像电影黑客帝国里面演的一样",Barry从红色的烟盒里取出一根烟发问道. "不可能 ...

  2. Mysql查询执行报错Packet for query is too large (6,831,159 > 4,194,304)

    根据意思可以看出 mysql执行的报文过大.需要我们设置允许的最大报文max_allowed_packet: org.springframework.dao.TransientDataAccessRe ...

  3. [人脸活体检测] 论文: Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision

    Learning Deep Models for Face Anti-Spoofing: Binary or Auxiliary Supervision 论文简介 与人脸生理相关的rppG信号被研究者 ...

  4. 2022-01-29:连接词。 给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。 连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串

    2022-01-29:连接词. 给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 . 连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串 ...

  5. 2021-06-27:给定一个正数数组arr,代表若干人的体重。再给定一个正数limit,表示所有船共同拥有的载重量。每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽

    2021-06-27:给定一个正数数组arr,代表若干人的体重.再给定一个正数limit,表示所有船共同拥有的载重量.每艘船最多坐两人,且不能超过载重,想让所有的人同时过河,并且用最好的分配方法让船尽 ...

  6. 2021-09-19:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。

    2021-09-19:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合. 福大大 答案2021-09-19: 递归. 参数1:左括号-右括号的数量. 参数2:左 ...

  7. django时区问题的解决

    django时区问题的解决  更新时间:2021年05月18日 09:37:58   作者:Silent丿丶黑羽     我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,我 ...

  8. XAF Excel Importer

    开源项目地址:https://gitee.com/easyxaf/excel-importer 前言 在XAF中有Excel导出,但没有Excel导入,一开始不理解,难道Excel导入很难实现吗,当我 ...

  9. Linux 中多终端同步 history 记录

    很多文章都是第一时间在语雀进行了更新和发布,公众号的文章只是在语雀平台的基础上进行同步的,而且更新频率也会比语雀要慢.最近弃坑简书,入驻语雀,欢迎阅读原文来语雀一起交流学习. 基本认识 Linux 默 ...

  10. Adobe 构建 IDP 之路的经验与教训

    在过去的25年多时间里,我创建了软件组件和分布式框架,建立并领导了相关团队.近几年我致力于推动 Adobe 服务开发.部署和管理系统的开发人员生产力. 抽象陷阱 在云时代早期,Adobe 的每个团队都 ...