面子工程之IP数据可视化

  

前言

  

我很在意的一件事情是好看,嗯,好看。以及是否有趣。虽然不一定有用。

  

下面是效果图,由于数据量有限,所以还不够眼花缭乱。

  

面子工程之IP数据可视化

  

面子工程之IP数据可视化

  

本文的主要内容是通过echarts, threejs将web日志或者任何含有IP数据的文本文件可视化。简单的来说,装逼,可以将这个动态图放在大屏幕上。

  

所有源码及相关数据文件请访问下面github仓库https://github.com/youerning/blog/tree/master/ip-visualize

  

前提条件

  
      <李>熟悉python及框架瓶李   <李>熟悉JavaScript李   
  

获取数据

  

IP数据

  

数据获取方式

  
      <李>日志文件   <李>麋鹿三件套   <李>其他李   
  

归根结底数据最终来自日志文件,这里主要指网络日志。

  

这里使用我自己网站的网络日志,格式如下。

  
 <代码> ' 116.24.64.239——(12/3月/2018:18:58:40 + 0800)“/HTTP/2.0“502 365 \ n”
  …
  116.24.64.239——[12/3月/2018:18:54:55 + 0800]GET/HTTP/2.0 200 1603 \ n  
  

通过下面代码将IP地址拿出来。

  
 <代码> #打开日志文件
  fp=开放(“website.log”)
  
  #创建ip集合,由于这里只需要ip地址,所以用集合的特性去重
  ip_set=组()
  
  #通过循环每次读取日志一行,如果日志量大建议以下方式,日志文件不大,可以直接readline,一次性全部读取出来,
  而真正的:
  行=fp.readline ()
  如果len (line.strip ()) & lt;1:
  打破
  ip=line.split () [0]
  ip_set.add (ip)
  
  #访问用户IP的个数
  len (ip_set)
  
  #查看前20个IP
  列表(ip_set) (20):
  [' 111.206.36.133 ',
  “220.181.108.183”,
  “40.77.178.63”,
  “220.181.108.146”,
  “119.147.207.152”,
  “112.97.63.49”,
  “66.249.64.16”,
  “138.246.253.19”,
  “123.125.67.164”,
  “40.77.179.59”,
  “66.249.69.170”,
  “119.147.207.144”,
  “66.249.79.108”,
  “157.55.39.23”,
  “123.125.71.80”,
  “42.236.10.84”,
  “123.125.71.79”,
  “111.206.36.10”,
  “106.11.152.155”,
  ' 66.249.66.148 ']
  
  不过为了使用广泛这里使用正则表达式。
  进口再保险
  帕特=" \ d {1,3} \ \ d {1,3} \。。\ d {1,3} \ \ d {1,3}”。
  ipfind=re.compile (pat)
  
  行=' 116.24.64.239——[12/3月/2018:18:54:55 + 0800]“得到/HTTP/2.0”200 1603 \ n”
  
  ip=ipfind.findall(线)
  如果知识产权:
  ip=ip [0]
  打印(ip)
  
  下面是完整步骤
  #创建ip列表
  ip_lis=列表()
  
  #文件的日志
  文件=水珠(“日志/*”)
  
  # complie正则表达式
  帕特=" \ d {1,3} \ \ d {1,3} \。。\ d {1,3} \ \ d {1,3}”。
  ipfind=re.compile (pat)
  
  #从每个文件中提取ip
  日志文件的文件:
  张开(日志文件)作为外交政策:
  #通过循环每次读取日志一行,如果日志量大建议以下方式,日志文件不大,可以直接readline,一次性全部读取出来
  #如果太大则用readline一行一行的读
  
  行=fp.readlines ()
  线的线:
  如果len (line.strip ()) & lt;1:
  继续
  ip=ipfind.findall(线)
  如果知识产权:
  ip=ip [0]
  ip_lis.append (ip)
   
  

至此,我们将访问文件里面的IP拿的出来了。

  
  

值得注意的是:如果你有搭建麋鹿之类的日志集群,那么获取数据会更简单更快,只是方式不同而已。这里就不赘述了。

     

IP地址的地理信息

  

如果只是拿到IP数据,在本文并没有用,因为为了在地图上可视化每一个IP的位置,我们需要知道每个IP地址的地理信息,即,经纬度,所在城市等。

  

这里使用dev.maxmind.com提供的开源免费的geoip数据库。

  

下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/

  
  

这里不保证IP地址对应的位置信息绝对正确。为了保证IP地址的准确性,可以搜索在线的地理服务。

     

为了使用上面下载的数据库,首先得下载相应的模块。

面子工程之IP数据可视化