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

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

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