【强悍】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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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