ip2location.py
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的更多相关文章
- python调用py中rar的路径问题。
1.python调用py,在py中的os.getcwd()获取的不是py的路径,可以通过os.path.split(os.path.realpath(__file__))[0]来获取py的路径. 2. ...
- Python导入其他文件中的.py文件 即模块
import sys sys.path.append("路径") import .py文件
- import renumber.py in pymol
cp renumber.py /usr/local/lib/python2.7/dist-packages/pymol import renumber or run /path/to/renumber ...
- python gettitle.py
#!/usr/bin/env python # coding=utf-8 import threading import requests import Queue import sys import ...
- 解决 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 ...
- caffe机器学习自带图片分类器classify.py实现输出预测结果的概率及caffe的web_demo例子运行实例
caffe机器学习环境搭建及python接口编译参见我的上一篇博客:机器学习caffe环境搭建--redhat7.1和caffe的python接口编译 1.运行caffe图片分类器python接口 还 ...
- 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优
libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...
- MySqlNDB使用自带的ndb_setup.py安装集群
在用Mysql做集群时,使用Mysql的NDB版本更易于集群的扩展,稳定和数据的实时性. 我们可以使用Mysql自带的工具进行集群安装与管理:ndb_setup.py.位于Mysql的安装目录bin下 ...
- 将做好的py文件打包成模块,供别人安装调用
现在要将写完的3个py文件,打包. 步骤: 1.新建一个文件夹setup(名字随便取),在setup文件夹下,再新建一个文件夹financeapi. 2.将上面4个py文件拷贝至financeapi文 ...
- 使用pyInstaller发布PathMerge的exe版本(py转换成exe)
前言 PathMerge是用python写的一个辅助文件夹合并的小工具,它的特点是不用担心合并后文件会丢失,旧文件会创建副本保存下来,除非你手动删除. 详情见:python开发目录合并小工具 Path ...
随机推荐
- Python str 模块
str字符串 str 转义字符 格式化 内建函数 字符串 表示文字信息 用单引号,双引号,三引号引起来 s = 'i love wangxiaojing' print(s) i love wangxi ...
- Centos7.x 安装 newman + postman
一.基础环境 输入 npm -v (查看 npm 版本) 输入 node -v(查看 node 版本) 二.安装newman 1.执行 npm install –g newman 进行安装 2.验证安 ...
- 几行代码教你快速创建scrapy项目,非常实用建议收藏!
import shutil,os修改settings.py def config(scrapy_path,project_name): judge=input("是否自动修改配置?是:yes ...
- KMP字符串匹配问题
KMP算法 本文参考资料:https://www.zhihu.com/question/21923021 KMP算法是一种字符串匹配算法,可以在 \(O(n+m)\) 的时间复杂度内实现两个字符串的匹 ...
- 程序员IT行业,外行眼里高收入人群,内行人里的卷王
程序员 一词,在我眼里其实是贬义词.因为我的其他不是这行的亲朋友好友,你和他们说,你是一名程序员· 他们 第一刻板影响就是,秃头,肥胖,宅男,油腻,不修边幅 反正给人一种不干净,不好形象,,,,不知道 ...
- 2020-09-25:rust中Point是结构体类型,【let p1=Point{x:25,y:25};let p2=p1;】请问p1和p2是同一个对象吗?
福哥答案2020-09-25:#福大大架构师每日一题# 不是同一个对象.p1和p2直接存内容,不存地址.这点跟java里的new对象是不一样的.p1.x和p1的地址相同,说明p1存的是内容,而不是地址 ...
- java中this的内存原理以及成员变量和局部变量
this的内存原理 1.this的作用: 区分局部变量和成员变量 eg: public class Student{ private int age; public void method(){ in ...
- mysql报错Unknown collation: utf8mb4_0900_ai_ci
mysql报错Unknown collation: utf8mb4_0900_ai_ci 解决方案: 将文件内的所有 utf8mb4_0900_ai_ci 换成 utf8_general_ci utf ...
- Linux修改Python软链接
Linux修改python软链接 0. 适用场景及基础知识 适用场景: 有些自带的是python3命令,嫌输入太麻烦,可以修改成python命令 有些自带是python是python2,想修改成pyt ...
- SpringBoot 使用 Sa-Token 完成路由拦截鉴权
一.需求分析 在前文,我们详细的讲述了在 Sa-Token 如何使用注解进行权限认证,注解鉴权虽然方便,却并不适合所有鉴权场景. 假设有如下需求:项目中所有接口均需要登录认证校验,只有 "登 ...