【强悍】d3.js让ssh暴破次数可视化

本博文出自博客老徐_kevin博主,有任何问题请进入博主页面互动讨论!

博文地址:http://laoxu.blog./4120547/1618400


一台做手机app应用的服务器在某云上,很好奇如果没有修改ssh端口的情况下,每天会被暴力破解多少次呢?带着这个疑问,查看一下/var/log/messages的日志,grep一下里面多少含有”Failed”的日志记录。。。

由于messages日志会有logrotate,所以:

  1. grep "^Mar  1"  /var/log/messages* | grep "Failed" | wc -l 

分别得到从本月1号到7号的暴力破解次数,分别是:

  1. 2015-03-07,4126   
  2. 2015-03-06,33499   
  3. 2015-03-05,80096   
  4. 2015-03-04,70208   
  5. 2015-03-03,79273   
  6. 2015-03-02,40995   
  7. 2015-03-01,11845 

除了7号比较安静点,平均每天5、6万次,看来黑客每天都很忙碌。。。

虽然数据比较少,但是看起来比较枯燥,看不出趋势,让数据可视化,那就用d3.js吧,上代码。。。

d3的库文件直接从github上获得即可。

index.html

  1. <!DOCTYPE html>   
  2. <html lang="en">   
  3.     <head>   
  4.         <meta charset="utf-8">   
  5.         <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />   
  6.         <title>SSH爆破次数</title>   
  7.     </head>   
  8.     <body>   
  9.         <center><div id="container"></div></center>   
  10.         <script type="text/javascript" src="js/d3.v3.js"></script>   
  11.         <script type="text/javascript" src="js/index.js"></script>   
  12.     </body>   
  13. </html> 

style.css 

  1. #container {   
  2. background:#eee;    //容器的背景色   
  3. width:600px;   
  4. height:270px;   
  5. }   
  6.     
  7. body { font12px Arial;}   
  8.     
  9. path {   
  10.     stroke: mediumturquoise;  //曲线的颜色,可以在chrome的控制台里使用stroke TAB后调试   
  11.     stroke-width2;   
  12.     fill: none;   
  13. }   
  14.     
  15. .axis path,   
  16. .axis line {   
  17.     fill: none;   
  18.     stroke: gray;   
  19.     stroke-width1;   
  20.     shape-rendering: crispEdges;   

data.csv 

  1. date,close   
  2. 2015-03-07,4126   
  3. 2015-03-06,33499   
  4. 2015-03-05,80096   
  5. 2015-03-04,70208   
  6. 2015-03-03,79273   
  7. 2015-03-02,40995   
  8. 2015-03-01,11845 

index.js

  1. var margin = {top: 30, right: 30, bottom: 50, left: 80},   
  2.     width = 600 - margin.left - margin.right,   
  3.     height = 270 - margin.top - margin.bottom;   
  4.     
  5. var parseDate = d3.time.format("%Y-%m-%d").parse;   
  6.     
  7. var x = d3.time.scale().range([0, width]);   
  8.     
  9. var y = d3.scale.linear().range([height, 0]);   
  10.     
  11. var xAxis = d3.svg.axis().scale(x)   
  12.     .orient("bottom").ticks(7)            
  13.     .tickFormat(d3.time.format("%b/%d"));   
  14.     
  15. var yAxis = d3.svg.axis().scale(y)   
  16.     .orient("left").ticks(10);   
  17.     
  18. var valueline = d3.svg.line()   
  19.     .x(function(d) { return x(d.date); })   
  20.     .y(function(d) { return y(d.close); })   
  21.     .interpolate("basis");   
  22.     
  23.     
  24. var svg = d3.select("#container")   
  25. .append("svg")   
  26. .attr("width", width + margin.left + margin.right)   
  27. .attr("height", height + margin.top + margin.bottom)   
  28. .append("g")   
  29. .attr("transform","translate(" + margin.left +"," + margin.top + ")");   
  30.     
  31.     
  32. // Get the data   
  33. d3.csv("data/data.csv"function(error, data) {   
  34.      data.forEach(function(d) {   
  35.      d.date = parseDate(d.date);   
  36.      d.close = +d.close;   
  37.                         });   
  38. // Scale the range of the data   
  39. x.domain(d3.extent(data, function(d) { return d.date; }));   
  40. y.domain([0, d3.max(data, function(d) { return d.close; })]);   
  41. svg.append("path")       // Add the valueline path.   
  42.    .attr("class""line")   
  43.    .attr("d", valueline(data));   
  44.     
  45. svg.append("g")          // Add the X Axis   
  46.    .attr("class""x axis")   
  47.    .attr("transform""translate(0," + height + ")")   
  48.    .call(xAxis);   
  49.     
  50. svg.append("text")                // text label for the x axis   
  51.    .attr("x", 265 )   
  52.    .attr("y", 238 )   
  53.    .style("text-anchor""middle")   
  54.    .text("日期");   
  55.     
  56. svg.append("g")          // Add the Y Axis   
  57.    .attr("class""y axis")   
  58.    .call(yAxis);   
  59.     
  60. svg.append("text")   
  61.    .attr("transform""rotate(-90)")   
  62.    .attr("y",0 - margin.left)   
  63.    .attr("x",0 - (height / 2))   
  64.    .attr("dy""1em")   
  65.    .style("text-anchor""middle")   
  66.    .text("SSH爆破次数");   
  67.                          }); 

以上就是一个页面的代码。访问页面看看d3.js的数据可视化效果吧。。。

效果如何?d3还是不错的吧?还有很多更cool的效果。。。Keep trying。。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/122177.html<

(0)
管理的头像管理
上一篇2025-02-22 05:37
下一篇 2025-02-22 05:39

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注