分析攻击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")

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

相关文章
|
28天前
|
Go
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
|
3月前
|
人工智能 数据可视化
跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算
跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算
222 1
|
3月前
R语言绘制组间比较散点图并自动添加P值信息
查询ggprism包使用时候发现官网给出的一示例图比较常用,这里记录学习一下。
47 3
|
4月前
|
机器学习/深度学习 算法 数据可视化
R绘图案例|基于分面的面积图绘制
R绘图案例|基于分面的面积图绘制
10769 0
|
数据可视化 Linux API
Py之seaborn:数据可视化seaborn库(一)的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的简介、使用方法之最强攻略(建议收藏)
Py之seaborn:数据可视化seaborn库(一)的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的简介、使用方法之最强攻略(建议收藏)
Py之seaborn:数据可视化seaborn库(一)的柱状图、箱线图(置信区间图)、散点图/折线图、核密度图/等高线图、盒形图/小提琴图/LV多框图的简介、使用方法之最强攻略(建议收藏)
跟着 Cell 学作图 | 箱线图+散点(组间+组内差异分析)
跟着 Cell 学作图 | 箱线图+散点(组间+组内差异分析)
304 0
跟着 Cell 学作图 | 箱线图+散点(组间+组内差异分析)
|
数据处理
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
162 0
R绘图 | 描述性统计常用图(散点图+柱状图+饼图)
|
数据可视化 数据挖掘 C++
集相关关系图、箱线图、直方图等于一身的R绘图包-GGally
发现一个功能强大的R包GGally,可以用于多维度呈现变量的属性,以箱线图、直方图、密度图等呈现出来,而且还可以展示变量间的相关关系,分组展示组间差异等等。总之,这个包可以看成是很多基础绘图的集成。值得学习一下。
|
数据可视化 数据安全/隐私保护
R 案例|绘制不同分布的 QQ 图
论文中需要绘制数据对于不同分布假定下的 QQ 图。这里小编主要是使用 qqplotr 包进行绘制,参考的博客:An Introduction to qqplotr[1]。
345 0
R 案例|绘制不同分布的 QQ 图
|
测试技术
echarts 折线图 多条折线数据相同时展示的图形并没有重合
echarts 折线图 多条折线数据相同时展示的图形并没有重合
echarts 折线图 多条折线数据相同时展示的图形并没有重合