开发者社区> 神棍先生> 正文

分析攻击IP来源地并画出饼图

简介: 版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
+关注继续查看
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/80508954

此文中的API将台湾列为国家,非本人立场,台湾属于中国,台湾岛生活的人不一定!
上码:

#!/usr/bin/python
#coding=utf-8

'''
http://ip-api.com/json/ip
'''


import plotly  
import plotly.plotly  
import plotly.graph_objs as abcc  
import plotly.plotly  

class Piecharts:  
    def __init__(self):  
        print "饼图生成中"  

    def makePiecharts(self,labels,values,filename):  
        trace = abcc.Pie(labels = labels,values= values)  
        plotly.offline.plot([trace],filename=filename) 


import requests
import sys

try:
    iplist = sys.argv[1]
except:
    print "IP list not given or some other error!"
countrylist = {}
regionlist = {}
citylist = {}

with open(iplist) as f:
    for ip in f.readlines():
        if ip.strip() != '':
            url = 'http://ip-api.com/json/' + ip.strip()
            try:
                result = requests.get(url)
                jsontext = result.json()
            except:
                print "Error: Data not retrieved!"
                continue
            status = jsontext['status']
            if status == 'fail':
                print "%s failed!" % ip.strip()
                continue
            mline = jsontext['as']
            city = jsontext['city']
            country = jsontext['country']
            countryCode = jsontext['countryCode']
            isp = jsontext['isp']
            lat = jsontext['lat']
            lon = jsontext['lon']
            org = jsontext['org']
            query = jsontext['query']
            region = jsontext['region']
            regionName = jsontext['regionName']
            timezone = jsontext['timezone']
            zipcode = jsontext['zip']

            if not country in countrylist:
                countrylist[country] = 0
            else:
                countrylist[country] += 1

            if not regionName in regionlist:
                regionlist[regionName] = 0
            else:
                regionlist[regionName] += 1

            if not city in citylist:
                citylist[city] = 0
            else:
                citylist[city] += 1
            try:
                print ip.strip() + '--' + country + '--' + regionName
            except:
                print "Special character!"
    print countrylist

    #country
    labels = [i for i in countrylist]  
    value = [countrylist[i] for i in countrylist]  
    drive = Piecharts()  
    drive.makePiecharts(labels,value,"country.html")  

    #region
    labels = [i for i in regionlist]  
    value = [regionlist[i] for i in regionlist]  
    drive = Piecharts()  
    drive.makePiecharts(labels,value,"region.html") 

    #city
    labels = [i for i in citylist]  
    value = [citylist[i] for i in citylist]  
    drive = Piecharts()  
    drive.makePiecharts(labels,value,"city.html") 

gevent协程并发版

#!/usr/bin/python
# coding=utf-8

'''
http://ip-api.com/json/ip
'''


import plotly
import plotly.graph_objs as abcc
import plotly.plotly


class Piecharts:
    def __init__(self):
        print u'饼图生成中'

    def makePiecharts(self, labels, values, filename):
        trace = abcc.Pie(labels=labels, values=values)
        plotly.offline.plot([trace], filename=filename)


import requests
import sys

try:
    iplist = sys.argv[1]
except:
    print "IP list not given or some other error!"
countrylist = {}
regionlist = {}
citylist = {}


def locater(url):
    try:
        result = requests.get(url)
        jsontext = result.json()
    except:
        print "Error: Data not retrieved!"
        return
    status = jsontext['status']
    if status == 'fail':
        print "%s failed!" % ip.strip()
        return
    mline = jsontext['as']
    city = jsontext['city']
    country = jsontext['country']
    countryCode = jsontext['countryCode']
    isp = jsontext['isp']
    lat = jsontext['lat']
    lon = jsontext['lon']
    org = jsontext['org']
    query = jsontext['query']
    region = jsontext['region']
    regionName = jsontext['regionName']
    timezone = jsontext['timezone']
    zipcode = jsontext['zip']

    if not country in countrylist:
        countrylist[country] = 0
    else:
        countrylist[country] += 1

    if not regionName in regionlist:
        regionlist[regionName] = 0
    else:
        regionlist[regionName] += 1

    if not city in citylist:
        citylist[city] = 0
    else:
        citylist[city] += 1
    try:
        print ip.strip() + '--' + country + '--' + regionName
    except:
        print "Special character!"


from gevent import monkey
monkey.patch_socket()
from gevent import pool
import gevent

pool = pool.Pool(40)
glist = []
with open(iplist) as f:
    for ip in f.readlines():
        if ip.strip() != '':
            url = 'http://ip-api.com/json/' + ip.strip()
            glist.append(pool.spawn(locater, url))
    gevent.joinall(glist)

    # country
    labels = [i for i in countrylist]
    value = [countrylist[i] for i in countrylist]
    drive = Piecharts()
    drive.makePiecharts(labels, value, "country.html")

    # region
    labels = [i for i in regionlist]
    value = [regionlist[i] for i in regionlist]
    drive = Piecharts()
    drive.makePiecharts(labels, value, "region.html")

    # city
    labels = [i for i in citylist]
    value = [citylist[i] for i in citylist]
    drive = Piecharts()
    drive.makePiecharts(labels, value, "city.html")

饼图效果:
这里写图片描述

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
图表解析系列之饼图
● 想要突出表示某个部分在整体中所占比例; ● 分类数量最好不大于 5 个; ● 各不同分类间的占比差异明显。
69 0
图表解析系列之折线图
折线图用于分析事物随时间或有序类别而变化的趋势。如果有多组数据,则用于分析多组数据随时间变化或有序类别的相互作用和影响。折线的方向表示正/负变化。折线的斜率表示变化的程度。
169 0
图表解析系列之柱状图
作为人们最常用的图表之一,柱状图也衍生出多种多样的图表形式。例如,将多个并列的类别聚类、形成一组,再在组与组之间进行比较,这种图表叫做“分组柱状图”或“簇状柱形图”。将类别拆分称多个子类别,形成“堆叠柱状图”。再如将柱形图与折线图结合起来,共同绘制在一张图上,俗称“双轴图”,等等。
144 0
matplotlib绘制箱形图之基本配置——万能模板案例(二)
matplotlib绘制箱形图之基本配置——万能模板案例
147 0
matplotlib绘制箱形图之基本配置——万能模板案例(一)
matplotlib绘制箱形图之基本配置——万能模板案例
268 0
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
119 0
跟着Nat Commun学作图 | 1.批量箱线图+散点+差异分析
跟着Nat Commun学作图 | 1.批量箱线图+散点+差异分析
134 0
跟着 Cell 学作图 | 箱线图+散点(组间+组内差异分析)
跟着 Cell 学作图 | 箱线图+散点(组间+组内差异分析)
209 0
集相关关系图、箱线图、直方图等于一身的R绘图包-GGally
发现一个功能强大的R包GGally,可以用于多维度呈现变量的属性,以箱线图、直方图、密度图等呈现出来,而且还可以展示变量间的相关关系,分组展示组间差异等等。总之,这个包可以看成是很多基础绘图的集成。值得学习一下。
104 0
R 案例|绘制不同分布的 QQ 图
论文中需要绘制数据对于不同分布假定下的 QQ 图。这里小编主要是使用 qqplotr 包进行绘制,参考的博客:An Introduction to qqplotr[1]。
287 0
+关注
神棍先生
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载