网络安全态势可视化

2023-05-16

导语

网络态势可视化技术作为一项新技术,是网络安全态势感知与可视化技术的结合,将网络中蕴涵的态势状况通过可视化图形方式展示给用户,并借助于人在图形图像方面强大的处理能力,实现对网络异常行为的分析和检测。这种方式充分结合了计算机和人脑在图像处理方面的处理能力的优势,提高了对数据的综合分析能力,能够有效的降低误报率和漏报率,提高系统检测效率,减少反应时间。并且这种可视化方法对于有些显示有明显特征的异常行为,还具有一定的预测能力。安全态势可视化系统的目的是生成网络安全综合态势图,以多视图、多角度、多尺度的方式与用户进行交互。
关键词:NetFlow; 实时态势; 可视化; 多视图;

先睹为快

图片描述

FireEye

360威胁态势感知系统

360威胁态势感知系统

实时Web监控器

实时Web监控器

大屏展示

大屏展示

大屏解说

第1块屏 业务运营监控

在云计算时代,用大数据和机器学习来提升我们的安全防御等级,已被验证是最有效的安全方案之一。本块大屏实时展现了当前云业务在全球各地的访问态势和黑客恶意攻击态势,绿色线代表着客户正常的访问,红色线代表着已被防御的黑客的攻击。可以看到,黑客攻击是无处不在,无时不有的,世界互联网的安全态势并不如我们印象中那么隐蔽和少见。在屏幕最底部,则是实时监控的网络出入口流量趋势,表现了业务服务的稳定性,并且,两趋势图两侧,标记了访问最多的用户所在地区TOP5,以及黑客攻击所在地区TOP5。

第2块屏 安全应急响应中心

安全感知是安全防御体系的核心,面对超级黑客的隐蔽攻击和渗透测试,是否能够第一时间识别和发现,是衡量安全体系优劣的根本。该屏幕可实时发现对业务进行渗透的黑客行为,每当有乌云的白帽子在挖掘我们漏洞的时候,该屏幕就会自动识别并告警。并将渗透行为的每一步都完整的记录下来,做为取证的关键证据,并且通过态势感知的溯源系统,定位到黑客的姓名,年龄等个人信息。面对黑客,我们可以不再等着挨打,而进行绝地反击。

第3块屏 安全感知体系

“安全应急响应中心”是每个企业的特种部队,他们在瞬息万变的互联网环境下,时刻准备着面临各种应急事件。本快屏幕集中展示了互联网最新曝光的重大漏洞疫情,以及先知,乌云等众测平台曝光的企业高危漏洞情报。并且对当下最紧急的漏洞进行评估,实时感知我们的业务是否受重大的漏洞影响,并且可以通过情报系统看到漏洞对同行业的影响,真正让安全风险可控。

第4块屏 安全防御体系大图

安全防御体系分别从网络层,主机层,再到应用层的攻防态势一览,全面的展示了云上业务的安全防御体系。从屏中可以看到,黑客的攻击流量先经过了网络层的DDoS清洗,将DDoS攻击阻挡在门外,接着又再经过应用防火墙把web攻击阻挡在门外,在通过安全组的访问控制,数据库RDS层的数据防火墙等防御措施,将几乎全部的黑客攻击阻挡在了门外,最后业务完全正常,为数以万计的互联网用户提供着我们的服务。

第5块屏 业务访客概览

基于当前1分钟内的网络流量数据,我们分析出最近1分钟内的在线访问者人数,以及来访者中的IP占比,使用浏览器占比,系统占比,以及服务器的响应状态码。并且罗列出访问最频繁的TOP10来访IP

第6块屏 业务稳定性监控

业务稳定性监控大屏,以每5分钟一次的频率,从全国36个省,100多个节点(电信联通双线路),对业务的稳定性和网络访问性能进行7x24小时监控,重点展示了网站在全国的平均访问时间和业务可用率,并列出了北上广深等全国整点省市的响应时间TOP排序,集中体现了业务运行的稳定性和网络的质量.

第7块屏 网络层安全态势

安全纵深防御” 是在云计算背景下最科学和先进的防御体系,是本块大屏实时展现了云业务在网络层的攻防态势。从屏幕中可以看到,我们当前面临的黑客web攻击次数,以及web攻击的类型分布图,并且通过大数据分析,我们能识别出是否有高级黑客在针对我们业务进行定向式web攻击,以便窃取我们的核心数据。同时,最近3个月内的攻击趋势我们也全部记录了下来,为将来的取证留下数字证据。在屏幕最下方,则分别实时监控着网络层的异常连接,DDoS攻击,未授权下载,非法登陆,页面篡改等重要的安全指标数据。

第8块屏 主机层安全态势

安全纵深防御” 是在云计算背景下最科学和先进的防御体系,是本块大屏实时展现了云业务在主机层的攻防态势。从屏幕中可以看到,我们当前面临的黑客暴力破解攻击次数,以及爆破协议的分布图,并且通过大数据分析,我们能识别出是否有高级黑客在针对我们业务进行定向式爆破破解。同时,最近3个月内爆破攻击趋势我们也全部记录了下来,为将来的取证留下数字证据。在屏幕最下方,则分别实时监控着主机上的漏洞,弱口令,后门,爆破成功,肉鸡行为等重要的安全指标数据。

第9块屏 主机连接拓扑大屏

通过主机中的数据采集,本块大屏实时展示了当前网络内部主机和主机之间的东西向流量拓扑图,并标明了内部网络流转态势,以及端口连接行为,并对异常的网络连接行为,尤其是一段时间以来从来没有连接过的主机,在一个错误的时间发生了异常状态,可以从大屏中一目了然的看见,给运维和安全工程师提供了有效的帮助。

第10块屏 实时安全态势和安全评分

本块大屏实时展现了当前业务的安全全景监控,顶部分别展示了云上业务的安全脆弱点,如漏洞个数,弱口令个数,以及信息泄露情况和被入侵情况的监控。同时,右侧的安全得分用最直观的方式表达了当前5分钟内的安全指数,总分为100分,据统计,全球企业的安全评分得分64分。同时,本块大屏还集中展示了最近7天的黑客攻击趋势,以及今天一天内的黑客攻击次数一览。在屏幕最底部,则显示了黑客经常攻击的云上ECS资产,这意味着该类资产需要提升更强健的防御级别。

基于TWaver SDK的安全态势模拟

  • 攻击监控 : 通过对特定网段、服务建立的攻击监控体系,可实时检测出绝大多数攻击,并采取相应的行动(如断开网络连接、记录攻击过程、跟踪攻击源等)。

  • 攻击模拟、病毒扩散模拟

  • 网络拓扑:网络基本拓扑结构有3种:星型、总线型和环型。

  • 应用系统安全: E-mail系统

3D病毒扩散

实时动态视图 + 网络物理拓扑视图 + 网络攻击  Earth Demo

安全态势数值  实时告警

实时动态视图3D效果

邮件系统

结合Echart的网络态势

网络安全态势分析

  1. 网络节点态势,二三维地理空间呈现——系统支持从地理空间分布维度,对全网主机及关键节点的综合安全信息进行网络态势监控。

  2. 网络逻辑架构,二三维拓扑结构呈现——系统支持从逻辑拓扑层级结构维度,从全网的整体安全态势,到信息资产以及安全数据的检测,进行全方位态势监控。

  3. 网络节点信息详细呈现——系统支持全网各节点的信息查询,实时反映节点信息的状态,对节点信息安全进行全面监测。

  4. 实时监测,灵活告警——系统提供强大的网络威胁入侵检测系统,深入分析网络流量信息,对全网各节点进行实时监测,并支持多种图表的威胁告警方式,让威胁一目了然。还可查看告警威胁事件的详细信息,同时支持自定义告警策略,设置告警范围和阀值等策略。

  5. APT高级威胁展示——基于APT攻击检测系统,对攻击来源、攻击目的、攻击路径进行溯源分析,同时根据安全威胁事件的来源信息和目标信息,结合GIS技术将虚拟的网络威胁和现实世界生动的结合起来,实现网络安全态势的可视化。

实验天地

地图数据

地图数据的来源,笔者选择开源的,如echarts的地图、D3的地图数据、或者是开源的地图数据;

地图加载

之前文章iChart--地图显示人口统计文章涉及到加载地图的Demo;

示例代码

<html>
<head>
  <title>Test Load EChart Map</title>
  <meta charset='UTF-8'>
  <script src="./libs/twaver.js"></script>
  <script src="./libs/jquery.js"></script>
  <script>
    function init () {
      box = new twaver.ElementBox();
      network = new twaver.vector.Network(box);
      // network.setDebug(true);
      document.body.appendChild(network.getView());
      function findDimensions() {
        if (window.innerWidth)
          winWidth = window.innerWidth;
        else if ((document.body) && (document.body.clientWidth))
          winWidth = document.body.clientWidth;
        if (window.innerHeight)
          winHeight = window.innerHeight;
        else if ((document.body) && (document.body.clientHeight))
          winHeight = document.body.clientHeight;
        if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) {
          winHeight = document.documentElement.clientHeight;
          winWidth = document.documentElement.clientWidth;
        }
      }
      findDimensions();
      network.adjustBounds({x: 0, y: 0, width: winWidth, height: winHeight});
      window.onresize = function (e) {
        findDimensions();
        network.adjustBounds({x: 0, y: 0, width: winWidth, height: winHeight});
      };
      box.setStyle('background.type', 'vector')
      .setStyle("background.vector.fill",true)
      .setStyle('background.vector.scope','viewport')
      .setStyle('background.vector.fill.color', 'rgba(3,11,25,1)');

      var countryLayer = new twaver.Layer('country');
      var provinceLayer = new twaver.Layer('province');
      var cityLayer = new twaver.Layer('city');

      var layerBox = box.getLayerBox();
      layerBox.add(countryLayer);
      layerBox.add(provinceLayer);
      layerBox.add(cityLayer);
      network.setMinZoom(0.00000001);

      network.getView().addEventListener('dblclick', function(e){
        var point;
        if (e.target) {
          point = network.getLogicalPoint2(e);
        } else if(e.event) {
          if(e.event.target) {
           point = network.getLogicalPoint2(e.event);
         }
       }
     }); 

      $.getJSON('resource/world.json', function(json, textStatus) {
        json = decode(json);
        loadData(json, countryLayer.getId());
        _twaver.callLater(function(){
          network.zoomOverview();
        })
      });
    }

    function loadData (json, layer) {
      json.features.forEach(function (feature) {
        var node = new twaver.ShapeNode(feature.id);
        node.setLayerId(layer);
        node.setStyle('vector.fill', false)
          .setStyle('vector.fill.color', 'rgba(3,11,25,0.8)')//474753
          .setStyle('vector.outline.color', 'rgba(58,86,101,1)')//9ab0e6
          .setStyle('select.color', 'green')//FFFFFF
          .setStyle('vector.outline.width', 20);
          node.s('vector.gradient','radial.southeast').
          s('vector.gradient.color','rgba(4,14,25,0.8)');
          if(feature.properties.name.toLowerCase() === 'china'){
            node.setStyle('vector.outline.color', '#e2001f');
            node.setStyle('vector.outline.width', 100);
          }
          node.setToolTip(feature.properties.name);
          var segments = new twaver.List();
          var points = new twaver.List();

          if (feature.geometry.type === 'MultiPolygon') {
            feature.geometry.coordinates.forEach(function (polygon) {
              polygon.forEach(function (coordinate) {
                segments.add('moveto');
                coordinate.forEach(function (point, i) {
                  if (i !== 0) {
                    segments.add('lineto');
                  }
                  points.add(convertPoint(point));
                });
              });
            });
          } else if (feature.geometry.type === 'Polygon') {
            feature.geometry.coordinates.forEach(function (coordinate) {
              segments.add('moveto');
              coordinate.forEach(function (point, i) {
                if (i !== 0) {
                  segments.add('lineto');
                }
                points.add(convertPoint(point));
              });
            });
          } else {
            console.log(feature.geometry.type);
          }

          node.setSegments(segments);
          node.setPoints(points);
          box.add(node);
        });
    }

    function convertPoint (point) {
      return { x: (point[0] - 117) * 100, y: (-point[1] + 31.7) * 100 };
    }

    function decode(json) {
      if (!json.UTF8Encoding) {
        return json;
      }
      var features = json.features;

      for (var f = 0; f < features.length; f++) {
        var feature = features[f];
        var geometry = feature.geometry;
        var coordinates = geometry.coordinates;
        var encodeOffsets = geometry.encodeOffsets;

        for (var c = 0; c < coordinates.length; c++) {
          var coordinate = coordinates[c];

          if (geometry.type === 'Polygon') {
            coordinates[c] = decodePolygon(coordinate,encodeOffsets[c]);
          }
          else if (geometry.type === 'MultiPolygon') {
            for (var c2 = 0; c2 < coordinate.length; c2++) {
              var polygon = coordinate[c2];
              coordinate[c2] = decodePolygon(
                polygon,
                encodeOffsets[c][c2]
                );
            }
          }
        }
      }
      // Has been decoded
      json.UTF8Encoding = false;
      return json;
    }

    function decodePolygon(coordinate, encodeOffsets) {
      var result = [];
      var prevX = encodeOffsets[0];
      var prevY = encodeOffsets[1];

      for (var i = 0; i < coordinate.length; i += 2) {
        var x = coordinate.charCodeAt(i) - 64;
        var y = coordinate.charCodeAt(i + 1) - 64;
            // ZigZag decoding
            x = (x >> 1) ^ (-(x & 1));
            y = (y >> 1) ^ (-(y & 1));
            // Delta deocding
            x += prevX;
            y += prevY;

            prevX = x;
            prevY = y;
            // Dequantize
            result.push([x / 1024, y / 1024]);
          }

          return result;
        }
      </script>
    </head>
    <body onload="init();">
    </body>
</html>

TWaver加载Echarts地图数据

<html>
<head>
  <title>Test Load EChart Map</title>
  <meta charset='UTF-8'>
  <script src="../../lib/twaver.js"></script>
  <script src="./jquery.js"></script>
  <script>
    function init () {
      box = new twaver.ElementBox();
      network = new twaver.vector.Network(box);
      network.setZoom = function (z,point) {
        z = this.checkZoom(z);
        if(this.isAsyncZoomAndViewRect()){
          var old = this._zoomMap[this._currentSubNetwork].zoom;
        }else{
          var old = this._zoom;
        }
        if (z == old) {
          return;
        }
        var size = this.getViewRect();
        point = { x: size.width / 2, y: size.height / 2 };
        var vr = this.viewRect;
        var offsetx = point.x - (point.x + vr.x) * z / old;
        var offsety = point.y - (point.y + vr.y) * z / old;
        // this._zoom = z;
        if(this.isAsyncZoomAndViewRect()){
          this._zoomMap[this._currentSubNetwork].zoom = z;
        }else{
          this._zoom = z;
        }
        this._paintAll = true;
        this.invalidateElementVisibility();
        this.invalidateCanvasSize();
        // this.validateCanvasSize();
        // this.invalidateElementUIs();
        this.zoomManager._invalidateZoom();
        // this.setViewRect(-offsetx, -offsety, this.viewRect.width, this.viewRect.height);
        if(this._asyncZoomAndViewRect){
          this.firePropertyChange("zoom", old, this._zoomMap[this._currentSubNetwork].zoom);    
        }else{
          this.firePropertyChange("zoom", old, this._zoom);
        }
        this.state.zooming = true;  
        var timer = null;
        var self = this;
        if (timer){  
          clearTimeout(timer);  
        }else{
          timer = setTimeout(function() {  
            timer = null;  
            self.state.zooming = false;  
            self.invalidateElementUIs(true);
          }, 100);  
        }
        // this.firePropertyChange("zoom", old, this._zoom);
      };
      network.setZoomManager(new CustomZoomManager(network,true));
      document.body.appendChild(network.getView());
      function findDimensions() {
        if (window.innerWidth)
          winWidth = window.innerWidth;
        else if ((document.body) && (document.body.clientWidth))
          winWidth = document.body.clientWidth;
        if (window.innerHeight)
          winHeight = window.innerHeight;
        else if ((document.body) && (document.body.clientHeight))
          winHeight = document.body.clientHeight;
        if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) {
          winHeight = document.documentElement.clientHeight;
          winWidth = document.documentElement.clientWidth;
        }
      }
      findDimensions();
      network.adjustBounds({x: 0, y: 0, width: winWidth, height: winHeight});
      window.onresize = function (e) {
        findDimensions();
        network.adjustBounds({x: 0, y: 0, width: winWidth, height: winHeight});
      };

      var countryLayer = new twaver.Layer('country');
      var provinceLayer = new twaver.Layer('province');
      var cityLayer = new twaver.Layer('city');

      var layerBox = box.getLayerBox();
      layerBox.add(countryLayer);
      layerBox.add(provinceLayer);
      layerBox.add(cityLayer);
      network.setMinZoom(0.00000001);

      $.getJSON('./china.json', function(json, textStatus) {
        loadData(json, provinceLayer.getId(),'china');
        _twaver.callLater(function(){
          network.zoomOverview();
        });
      });
    }
    function loadData (json, layer,type) {
      json.features.forEach(function (feature) {
        var node = new twaver.ShapeNode(feature.id);
        node.setLayerId(layer);
        type && node.setClient('type', type);
        node.setStyle('vector.fill', true)
          .setStyle('vector.fill.color', 'rgba(3,11,25,0)')//474753
          .setStyle('vector.outline.color', 'rgba(58,86,101,1)')//9ab0e6
          .setStyle('vector.outline.width', 2);
          node.setToolTip(feature.properties.name);
          var segments = new twaver.List();
          var points = new twaver.List();

          if (feature.geometry.type === 'MultiPolygon') {
            feature.geometry.coordinates.forEach(function (polygon) {
              polygon.forEach(function (coordinate) {
                segments.add('moveto');
                coordinate.forEach(function (point, i) {
                  if (i !== 0) {
                    segments.add('lineto');
                  }
                  points.add(convertPoint(point));
                });
              });
            });
          } else if (feature.geometry.type === 'Polygon') {
            feature.geometry.coordinates.forEach(function (coordinate) {
              segments.add('moveto');
              coordinate.forEach(function (point, i) {
                if (i !== 0) {
                  segments.add('lineto');
                }
                points.add(convertPoint(point));
              });
            });
          } else {
            console.log(feature.geometry.type);
          }
          node.setSegments(segments);
          node.setPoints(points);
          box.add(node);
        });
    }

    function convertPoint (point) {
      return { x: (point[0] - 117) * 80, y: (-point[1] + 31.7) * 100 };
    }

    CustomZoomManager = function(network){
      twaver.vector.LogicalZoomManager.superClass.constructor.apply(this, arguments);
      this.sizeChange = true;
    };

    _twaver.ext(CustomZoomManager,twaver.vector.LogicalZoomManager,{
      getSizeZoom : function(ui){
       if(ui) {
        var element = ui.getElement();
        if (element.getClient('type') !== 'china') {
          return 0.07;
        }
        var zoom = this.getZoom();
        return zoom;
      }else {
        return 0.07;
      }
    },
    getAttachmentSizeZoom : function(attachment){
      var zoom = this.getZoom();
      var element = attachment.getElementUI().getElement();
      if (element.getClient('type') !== 'china') {
        return 0.07;
      }
      var zoom = this.getZoom();
      return zoom;
    },
    getLocationZoom : function(ui){
      if(ui) {
        var element = ui.getElement();
        if (element.getClient('type') !== 'china') {
          return 0.07;
        }
        var zoom = this.getZoom();
        return zoom;
      }else{
        return 0.07;
      }
    }
  });

</script>
</head>
<body onload="init();">
</body>
</html>

导入D3地图数据

攻击效果

圆环攻击

攻击走向

攻击效果如何实现呢?一张图解惑答疑也!

好多个圈圈

图片描述

在这里,通常还会有个需求,即:希望箭头流过的地方再留下线条,否则不显示;对于TWaver也很好解决;看效果吧。

流到哪里,哪里就是我的家

未完待续。。。

参考文献

[1].中国智造数据可视化系统鉴赏
[2].态势感知 : 可视化大屏
[3].网络态势大数据可视化系统
[4].360发布威胁态势感知系统:数据可视化,态势更直观
[5].FireEye
[6].(大数据)安全管理与动态防御平台
[7].记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华
[8].数字冰雹数据观
[9].可视化文献 链接: https://pan.baidu.com/s/1mii9v64 密码: whqj
[10].有关网络攻击的世界地图是怎么开发的?比如 ZoomEye 经常有一些这样很酷的地图
[11].实时 WEB 监控器
[12].Norse
[13].如何理解 Norse 网站显示的实时网络攻击?
[14].国内外与信息可视化相关的专业博客、论坛、社区有哪些?
[15].卡巴斯基实验室发布交互式全球网络威胁地图
[16].网络安全可视化
[17].TechTarget安全
[18].值得收藏!国外最佳互联网安全博客TOP 30

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络安全态势可视化 的相关文章

  • 国内首个网友可以开发应用的开放式网络操作系统

    国内首个面向电脑爱好者的应用开放平台 X在线电脑 xff0c 提供傻瓜化的网络应用程序开发工具 应用梦工厂 xff0c 让不擅长编程的电脑爱好者们 xff0c 也能开发OA ERP等企业应用 xff0c 并且能快速部署到X在线电脑 X在线电
  • linux多级菜单脚本教程,Linux下使用readline库编程实现多级CLI菜单

    一 背景 CLI是一种快速简洁的人机交互方式 xff0c 优秀的CLI 如 mysql vtysh gdb 带给我们非常好的体验 那么CLI都是如何开发出来的 xff1f 二 相关知识 2 1 CLI vs GUI 文章 1 纵观CLI与G
  • 白盒交换机NOS列表(picos/SnapRoute/ONL)

    WIKI NOS xff1a https en wikipedia org wiki Network operating system Examples JUNOS used in routers and switches from Jun
  • powershell

    常用单行命令 目录 查看当前目录的大小 xff0c 并排序输出 du h max depth 61 1 sort nr 自动选择单位 du m max depth 61 1 sort nr 选择M为单位 转载于 https www cnbl
  • 私有云对企业来说有什么好处

    企业是一个受控集团 xff0c 只有良好的管理 决策 xff0c 一个企业才有成功的希望 xff0c 所以管理在企业中占有重要的地位 私有云的使用是一只无形的手 xff0c 它控制着日常工作中的资源和效率 1 企业拥有基础设施 xff0c
  • JavaScript禁用页面刷新

    JavaScript禁用页面刷新代码如下 xff1a 禁用F5刷新 document onkeydown 61 function if event keyCode 61 61 116 event keyCode 61 0 event can
  • java 整除(/) 求余(%) 运算

    1 java 整除 求余 运算 1 求余 System out println 11 2 顾名思义就是11除2的余数 gt 1 System out println 11 2 结果 gt 1 System out println 11 2
  • C# 解决窗体闪烁

    C 解决窗体闪烁 在Windows窗体上造成 闪烁 的窗体上有很多控制 造成这种闪烁的原因有两个 xff1a 1 当控件需要被绘制时 xff0c Windows发送一个控件两个消息 第一个 xff08 WM ERASEBKGND xff09
  • OVN – OVN OpenStack(二)

    OpenStack networking ovn 项目为Neutron提供了一个基于ML2的OVN插件 xff0c 它使用OVN组件代替了各种Neutron的Python agent xff0c 也不再使用 RabbitMQ xff0c 而
  • 飞秋无法显示局域网好友

    1 飞秋无法显示局域网好友 无法查看网上邻居 无法适用共享打印机的问题是由于开启了 局域网隐身 的缘故 xff0c 打开 360安全卫士 xff1e 功能大全 xff1e 网络优化 xff1e 流量防火墙 xff1e 局域网防护 xff0c
  • pandas 按照某一列进行排序

    pandas排序的方法有很多 xff0c sort values表示根据某一列排序 pd sort values 34 xxx 34 inplace 61 True 表示pd按照xxx这个字段排序 xff0c inplace默认为False
  • 关系数据库和NoSQL结合使用:MySQL + MongoDB

    Home Page 作者使用一个案例来说明MySQL 43 MongoDB结合使用 xff0c 发挥各自所长 xff0c 并且认为他们互补性很强 当然 xff0c 这其中不可避免引入DDD中的编程设计模式 Repository仓储模式 xf
  • 查看网卡信息及状态和网卡日志信息

    查看网卡信息 1 mii tool v w em1 em2 l0 em1 negotiated 100baseTx FD link ok product info vendor 00 aa 00 model 57 rev 1 basic m
  • 筛选出sql 查询结果中 不包含某个字符

    select from table1 where patindex 39 关键字 39 aa 61 0 select from table1 where charindex 39 关键字 39 aa 61 0 select from tab
  • IE8正式版引发VS2005和VS2008添加变量向导出错的解决方案

    1 解决办法1 xff1a 2 卸载IE8 3 解决办法2 xff1a xff08 自己使用的方法 xff09 4 5 打开注册表编辑器 6 7 选择 HKEY CURRENT USER Software Microsoft Windows
  • Visual Studio 2010中文旗舰版+大家所关心的

    下载地址 xff08 VS2010不含MSDN xff09 xff1a http download microsoft com download 2 4 7 24733615 AA11 42E9 8883 E28CDCA88ED5 X16
  • CSS列表

    CSS列表属性可以放置 改变列表项的标志 xff0c 或者将图像作为列表项标志 list style xff1a 简写属性 用于把所有用于列表的属性设置在一个声明中 list style image xff1a 将图像设置为列表项的标志 U
  • Lodash源码讲解-compact函数

    原文首发于Lodash源码讲解 这是我们阅读Lodash源码的第3篇博客 xff0c 在这篇文章里我们来学习一下Lodash的compact方法 compact函数内部没有依赖别的函数 xff0c 让我们先来看一下compact函数的源码
  • CentOS 6.5下Squid代理服务器的安装与配置

    一 系统环境 操作系统 xff1a CentOS release 6 5 Squid版本 xff1a squid 3 1 10 20 el6 5 3 x86 64 SELINUX 61 disabled HTTP Service stope
  • 修改VNCSERVER的分辨率

    使用VNC远程连接时 xff0c 最大化窗口后仍旧在中间显示一个小屏幕 xff0c 并没有随着窗口最大化 xff0c 解决该问题需要首先在VNC窗口标题栏右键 gt Options gt Scaling 选择第二项 xff1a Scale

随机推荐

  • XMLHttpRequest - 原始AJAX初步

    我们知道 xff0c 传统的Web应用是request response形式的 xff0c 即浏览器向服务器发送请求 xff0c 服务器进行处理 xff0c 然后再对浏览器响应 这种形式最大的缺点就是 xff1a 客户端需要等服务器处理完之
  • Python面向对象编程 - 一个记事本程序范例(二)

    给程序加上控制台菜单 menu py import sys from notebook import Notebook Note class Menu 39 39 39 Display a menu and respond to choic
  • 个人代码库の自动粘合桌面边缘

    using System Windows Forms using System namespace public partial class form 必要事件 xff1a No 1 xff1a 窗体的 Move 事件 No 2 xff1a
  • 完全参照系统自带的DatePickerDialog、TimePickerDialog的源代码仿写的DateTimePickerDialog...

    完全参照系统自带的DatePickerDialog TimePickerDialog的源代码仿写的DateTimePickerDialog 具有同时选择日期 时间的功能 在2 2 2 3平台 xff0c 显示的效果可能会有一个大背景框在后面
  • Tracking your habits in Org-mode

    纯属记录 在org mode中 xff0c 你可以跟踪你的周期性事务或辅助培养习惯 xff0c 比如每天阅读半小时 xff0c 每天完成后org mode会予以记录 如果你正计划每月培养一个好习惯 xff0c 也可以使用这个功能来记录你的完
  • 算法的力量

    算法的力量 李开复 真正学懂计算机的人 xff08 不只是 编程匠 xff09 都对数学有相当的造诣 xff0c 既能用科学家的严谨思维来求证 xff0c 也能用工程师的务实手段来解决问题 而这种思维和手段的最佳演绎就是 算法 虽然在摩尔定
  • Xstream序列化实体

    Java序列化的日期为是很标准 xff0c XStream中转换为标准的做法 import java text DateFormat import java text ParseException import java text Simp
  • Booksort 启发式函数很重要h(s1)<=h(s2)+cost(s1,s2);

    Problem Description The Leiden University Library has millions of books When a student wants to borrow a certain book he
  • FreeBSD的基本系统下Shell设置(转)

    FreeBSD的基本系统下Shell设置 转 64 more 64 命令解释程序shell是与用户关系最密切的应用程序 xff0c 用户主要通过shell使用系统 在每次登录系统之后 xff0c 就启动了一个与用户交互的shell xff0
  • 20050410:他们不过是一群政客

    从来就没有把台湾人民的利益放在眼里 xff0c 甚至不惜拿他们来做挡箭牌 xff0c 一边还对日本谄媚有加 转载于 https www cnblogs com yidinghe archive 2005 04 10 134987 html
  • 排列组合公式

    注 xff1a 排列与元素的顺序有关 xff0c 组合与顺序无关 xff0e 如231与213是两个排列 xff0c 2 xff0b 3 xff0b 1的和与2 xff0b 1 xff0b 3的和是一个组合 xff0e 1 xff0e 排列
  • Mybatis初始化机制

    对于任何框架而言 xff0c 在使用前都要进行一系列的初始化 xff0c MyBatis也不例外 本章将通过以下几点详细介绍MyBatis的初始化过程 1 MyBatis的初始化做了什么 2 MyBatis基于XML配置文件创建Config
  • ValidationSummary控件

    ValidationSummary控件用于在页面中的一处地方显示所有验证错误的列表 这个控件在使用大的表单时特别有用 如果用户在页面底部的表单字段中输入了错误的值 xff0c 那么这个用户可能永远也看不到错误信息 不过 xff0c 如果使用
  • 数据特征分析——概述

    一 6个基础分析思路 xff1a 1 分布分析 2 对比分析 3 统计分析 4 帕累托分析 5 正态性检验 6 相关性分析 二 分布分析 分布分析 xff1a 研究数据的分布特征和分布类型 xff0c 分定量数据 定性数据区分基本统计量 三
  • Filebeat 6.0 把日志直接输入到ES中如何自定义index

    临时搭建了一套EFK xff08 elasticsearch xff0c filebeat xff0c kibana xff09 xff0c filebeat 6 0 默认的index 是filebeat 43 时间 xff0c 这样无法满
  • 人在异乡

    为什么到了上海五年 xff0c 还是没有归属感 to be continued
  • 怎么求矩阵对应的基

    怎么求矩阵对应的基呢 xff1f 对矩阵做初等行变换 xff0c 化为上三角形 或 对角型 xff0c 主对角元素不为0的列即为该矩阵的一组基 A 61 这个矩阵对应的一个基 为 其实 xff0c 将第二行的 1 倍加到第一行上 xff0c
  • javascript弹出窗口代码

    1 最基本的弹出窗口代码 lt SCRIPT LANGUAGE 61 34 javascript 34 gt lt window open 39 page html 39 gt lt SCRIPT gt 因为着是一段javascripts代
  • 大规模异步新闻爬虫【5】:网页正文的提取

    前面我们实现的新闻爬虫 xff0c 运行起来后很快就可以抓取大量新闻网页 xff0c 存到数据库里面的都是网页的html代码 xff0c 并不是我们想要的最终结果 最终结果应该是结构化的数据 xff0c 包含的信息至少有url xff0c
  • 网络安全态势可视化

    导语 网络态势可视化技术作为一项新技术 xff0c 是网络安全态势感知与可视化技术的结合 xff0c 将网络中蕴涵的态势状况通过可视化图形方式展示给用户 xff0c 并借助于人在图形图像方面强大的处理能力 xff0c 实现对网络异常行为的分