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 ...
随机推荐
- [C++核心编程] 3、函数提高
文章目录 3 函数提高 3.1 函数默认参数 3.2 函数占位参数 3.3 函数重载 3.3.1 函数重载概述 3.3.2 函数重载注意事项 3 函数提高 3.1 函数默认参数 在C++中,函数的形参 ...
- 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
补题链接:https://codeforces.com/gym/104337 原文链接:https://www.eriktse.com/algorithm/1136.html M. Different ...
- 【经验分享】使用Windows自带Xbox显示游戏帧率
环境: 工具:Xbox Game Bar 系统版本:Windows 10 快捷键:win + G 需求描述: 描述:需要实时显示当前游戏的帧率和硬件的占用率情况.如下图: 实现方法: 1.按下组合键w ...
- FreeSWITCH对接vosk实现实时语音识别
环境:CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 Python版本:3.9.2 一.背景描述 vosk是一个开源语音识别工具,可识别中文,之前介绍过python使用vosk ...
- OFFICE-Excel_在只有清单没有定额人材机的情况下筛选工程量的操作
目的 一个来自东莞的项目需要清单里面所有的电线电缆的量和价,但是由于东莞市的投标清单只需要清单报价即可,没有定额,也就没有人材机,所以就只能依靠清单来剔除量,但是有几个问题,众所周知电线电缆这种材料一 ...
- Keepalived 高可用
Keepalived 高可用 什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的. 高可用通常使用的软件 keep ...
- 2022-12-13:游戏玩法分析 I。写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期。 +-----------+-------------+ | player_id | first_l
2022-12-13:游戏玩法分析 I.写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期. ±----------±------------+ | player_id | first_log ...
- 2022-11-24:小团在地图上放了3个定位装置,想依赖他们进行定位! 地图是一个n*n的棋盘, 有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内。 小团在(a,
2022-11-24:小团在地图上放了3个定位装置,想依赖他们进行定位! 地图是一个n*n的棋盘, 有3个定位装置(x1,y1),(x2,y2),(x3,y3),每个值均在[1,n]内. 小团在(a, ...
- 打开windows批处理大门
大家好,我是xiezhr. 1 前言 打开历史文章一看,上一篇文章是2021年3月20号更新的,又拖更了. 一个原因是,最近工作上真的挺忙的,有比较着急需要加班加点赶的需求.好在清明前算是把比较着急的 ...
- Python MQTT客户端 paho-mqtt
Python中MQTT Python有许多优秀的MQTT客户端,比较有代表性的有paho-mqtt.hbmqtt.gmqtt等,各有特色 paho-mqtt 有着最优秀的文档,代码风格易于理解,同时有 ...