一个好的安全体系的前提是为合法主体建立信任关系,通过信任在保证业务的前提下降低安全成本,在运行时及时检测并消除非法主体的恶意行为,所以信任是网络安全的前提要求。
维基百科上对信任(Trust)的定义为:
一方(信任方)在未来依赖另一方(被信任方)行动的意愿。
假设给定三方A、B、C,三者之间都有交互,如下图所示。
那么信任是指主体A对主体B未来发生行为action(B)的依赖意愿,这里有两层含义:
那么,主体A对B的信任度Trust(B,A)可形式化表述为:
Trust(B,A)=t({action (B)},Reputation(B,C)),其中t为信任评估函数
可见,主体A对B的action(B)行为的信任是结合了
事实上,信任度的度量会更复杂一些,需要考虑到观察行为(即证据)的可靠度,以及信任度随着时间推移衰减等因素。
而信任机制在应用时,根据不同的场景和需求会有多种形态,如IAM(Identity and AccessManagement)、访问控制、边界控制等,具体产品就更是五花八门。但核心上看,信任管理有四个要素(如上图所示):
行业内主流的信任管理机制都是采用了确定性的信任评估方式,设置后长期不变、控制面和数据面混合在一起,虽然简化了策略制定、系统运行时机制,但没有考虑到上下文变化,这是造成现在网络安全事件频发的根本原因之一。
所以,一个好的信任管理机制,在控制平面需要保证主体、资源属性与安全策略在运行过程中保持一致;在数据平面,操作控制点能时刻在主体和资源的访问路径上;同时还要注意控制面和数据面要保持合理的独立隔离。
目前为止我们分析了信任管理,那么“零信任”又是什么呢?我们不禁要问,世界上到底有没有零信任?
答案是:“没有”,也“有”。
从上面的分析可见,“零信任”从字面上看是有误导性的,世界上不存在完全不信任任何主体的业务,所谓“零信任”安全,更准确的说法应该是“默认不信任,时时处处验证”安全。
从技术上看,要做到信任管理,或在身份上下功夫,或在控制上下功夫。现有业界的零信任方案必定落到某个具体的技术领域内,如
需要注意的是,以上技术路线之间只是一种概念和侧重点上的划分,在实际的技术方案和产品中,往往是融合多种不同的技术路线。
身份和权限管理(IAM、IDaaS和PAM)作为信任的第一个环节,也很自然地得到了业界重视,如Cisco收购的Duo Security,就是IAM起家,并融入到Cisco的零信任方案中。此外,如Centrify于2018年年底将IDaaS业务拆分为独立的公司Idaptive,在其方案中使用了零信任的概念,还有国内的九州云腾也有相似的方案。
在主体执行动作时,对主体权限和行为进行判断,最常见的是网络访问控制,这类零信任方案统称为零信任网络访问(Zero Trust Network Access,ZTNA),细分的流派有CSA SDP和BeyondCorps两类。不过Gartner在最新的报告中将这两类又统称为软件定义边界(SDP),所以文中将前者称为CSA SDP,表示它是最早由CSA提出的狭义SDP流派。
CSA SDP见下图,认证请求是由客户端Initiating SDP Host(IH)发起的,控制器经过访问控制策略判断下发指令,最终由Accepting SDP Host(AH)根据指令放行或阻断。
CSA SDP模型
BeyondCorps的路线最早见Google BeyondCorps项目,其流程见下图,认证请求是由用户访问的服务发起的,控制点也在服务侧,所以该服务的角色就是代理。
基于代理的ZTNA路线
从效果看,这两种技术路线都是隐藏后面的应用,除非用户提供了自己的身份和访问资源,否则用户是无法访问应用的。从部署上看,CSA SDP需要客户端安装Agent,所以环境要求较高,目前主要是应用于替代VPN的场景中,这类公司较多,如Cyxtera、Meta Network、Verizon等。
从结果看,“零信任”与隔离有很大的相关度。一些云厂商借助微隔离技术,可天然按照不同粒度隔离业务,例如VMware在NSX产品中提出用微隔离减少攻击面。
在SaaS场景中,随着敏捷开发、高效运营的驱动,用户越来越多地使用云原生的架构来开发应用。在云原生场景中,应用的颗粒度会被切得非常细,一个容器通常只运行一个或少数若干进程,故服务称为微服务。所以,通常实现一个业务需要多个微服务的交互,在云原生场景中,服务之间的访问关系非常复杂,不能依靠固化的访问控制逻辑,而是应该按照业务的逻辑确定微服务间的安全策略,划分微服务的边界进行持续有效的隔离,以及在微服务之间应用一致的访问权限控制,就变得非常重要。为了解决这个问题,云原生的系统通常都会有数据和管理平面的鉴权机制。
而在服务网格场景下,零信任还应覆盖微服务间的交互,这部分需要使用面向云原生的服务零信任机制。比较典型的方案是Google的Istio。从功能上看,Istio可为微服务无缝加入认证授权和加密通信的功能。其思想是通过策略控制器,使用Kubernetes的RBAC授权机制,对资源粒度细化到单个服务的访问控制,从而所有的服务交互都是可信的。
从效果看,如果攻击者没有合法身份,是无法在数据平面横向移动的。因为在网络层设置了网络策略白名单后,网络层的非法访问就被禁止了;而在服务层,微服务Pod的开放服务较少,且都引入了认证和业务层访问控制,攻击者也很难发起非授权的连接。
从数据平面分析,Istio和SDP都需要对网络做比较大的修改。如SDP需要添加IH和AH,客户端需要添加组件,服务端也需要部署代理,而Istio的Sidecar容器也需要部署在所有业务容器旁,且截获流量,通过重写IPTABLES的NAT表的方式将处理完的流量送回业务容器。
从结果观察,因为上述原因,SDP在传统企业网络中部署遇到了非常大的挑战,但可预计Sidecar的部署模式会在服务网格环境中成为主流的安全防护技术。原因是Sidecar虽然是一种侵入性部署模式,但全程自动化、用户友好:Istio主动监听k8s-api服务获得新服务部署事件,通过仓库自动部署Sidecar容器,通过Init容器劫持流量,最后Sidecar使用Citadel和RBAC策略进行认证授权。一方面,业务方对安全机制毫无感知,所有开发、测试和运维均保持不变;另一方面,应用间能实现完备的认证和授权,最终达到内生安全。
本质上来说,云计算安全是催生零信任的最早行业推动力。
云计算系统的最大特点是所有资源虚拟化和软件化、平台集中化。其中,如认证和访问控制机制是云计算系统原生提供的,如
所以这些云平台的控制平面和数据平面都是原生支持零信任的。
云计算系统数据平面的访问会涉及计算资源的隔离和访问控制,资源隔离毫无疑问是虚拟化天然的特性,至于访问控制,则分为服务暴露和内部网络访问两部分。
所以云计算资源暴露面默认是没有的,从而避免了绝大多数来自互联网上的威胁。
至于当OpenStack为虚拟机分配了浮动IP、Kubernetes为Pod分配了Ingress或NodePort服务后,这些云资源对外提供服务,用户可在外访问,就出现了暴露的风险。所以在这种场景下,BeyondCorps的SDP模式就能帮助企业隐藏敏感服务,提供细粒度的访问控制。虽说这不是云平台原生提供的安全能力,但SDP借助云平台的开放接口,可以容易地对接到各大公有云。相比而言,如果在传统企业内网部署类似的SDP服务,则需要对传统网络结构、服务器应用进行大力度改造,这几乎是不可能实施的(所以现在传统企业采用SDP主要是代替传统VPN,实现细粒度的访问控制)。
而在内部网络中,同样也可以通过零信任的访问控制机制防止攻击者横向移动。
可见,云计算系统数据平面的可编程和软件化能力确实能够提供零信任的认证授权、资源隔离、访问控制的机制。
从实践来看,云原生安全和零信任安全是有一定相关性的。
基于以上,我们可以得出一个推论:云原生的(零)信任机制必然会扩展、连接到更多环境,如企业内网、移动网络,甚至物联网、工业互联网等,就如现在公有云开始连接企业内网、工业互联网连接生产环境和云平台的趋势一样。
那么,云原生的零信任机制就需要借助其先进的软件能力和先进架构,开始适配云原生以外的更多应用场景,最终实现面向融合环境的零信任机制。
另外,零信任虽然给我们一种全新的信任管理理念,但不代表实现了“零信任”机制就是万无一失、无懈可击的。在最极端的场景下,如果访问主体本身怀有恶意的意图,虽然身份和权限是正常的,但其行为本身是异常的,所以“零信任是银弹吗?”的答案显然是否定的。
零信任的最大价值在于减少暴露面和攻击面,所以应该处于Gartner的自适应安全体系的防御(Prevention)阶段,应该假定存在攻击者侵入的可能性。正如NIST的零信任模型中包含了持续诊断和缓解系统,以进行实时监测和及时响应。
所以,如何将零信任作为指导思想,融入到整个安全体系中,就需要我们设计一种零信任原生的形式化模型和安全架构。
综上,“零信任原生安全”从设计上就体现了零信任理念,融合了多种安全能力;在实现上可适配各类应用场景的安全体系。它脱胎于零信任的理念,融合自适应安全的安全体系,有机形成预防、检测和响应的能力,利用云原生安全的架构和能力,通过软件定义的架构,可适配多种应用场景。
SAPWM同一个工厂下跨仓库号转库初探ISAP制造业项目里,同一家工厂一般而言都会只设置一个仓库号,这家工厂下的多个不同的存储地点共享同一个仓库号,这是项目实践中常见的Practice。笔者一直很好奇,如果同一个工厂代码下二个不同的存储地点各自有单独的仓库号,转库的时候WM层面会是什么样子的。近日笔者利用业余时间,在一个sandbox系统里做了相关的测试和研讨,很有收获,是故写下文字对测试过程做一个记录。工厂NMDC下的存储地点0001,仓库号是NM1;存储地点1001,仓库号是NM2。如下图示:现在执行事务代码MIGO,移动类型311,将物料号820的库存从0001存储地点转入1001存储地点,数量是33EA。如下图示:保存过账,物料凭证号创建了。检查这个物料凭证号,WM选项卡数据里,仓库号是NM1,WM层面移动类型311。TR#113为该物料凭证号执行事务代码LT06,回车,进入如下界面:可以发现该物料凭证号与2个仓库号下的TR关联,一个是NM1仓库号下的TR#113,一个数NM2仓库号下的TR#3。这是同一个工厂下多个仓库号的前提下,跨存储地转库的特殊之处。发货库存地需要有WM层
这一章就结合实例来看下通过修改配置文件,实现简单的防火墙功能。这个功能的实现依靠nginx的access模块,这个模块在我们编译nginx时会默认编译进nginx的二进制文件中。语法:Syntax: allowaddress|CIDR|unix:|all; Default: — Context: http,server,location,limit_except Syntax: denyaddress|CIDR|unix:|all; Default: — Context: http,server,location,limit_except复制allow:允许访问的IP或者网段。deny:拒绝访问的ip或者网段。从语法上看,它允许配置在http指令块中,server指令块中还有locatio指令块中,这三者的作用域有所不同。如果配置在http指令块中,将对所有server(虚拟主机)生效;配置在server指令块中,对当前虚拟主机生效;配置在location指令块中,对匹配到的目录生效。ps:如果server指令块,location指令块没有配置限制指令,那么将会继承http的限制指令,
1.速度控制1.1php代码方式functionhttp_request($URI) { $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$URI); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //速度控制 $speed=100000; curl_setopt($ch,CURLOPT_MAX_RECV_SPEED_LARGE,100000); $result=curl_exec($ch); if(!$result){ echocurl_error($ch); returnfalse; } curl_close($ch); return$result; } $url="http://toutiao.sogoucdn.com/ykvideo/20181130/0575139af28f38c336912739acf33a88.mp4"; $res=http_request($url); file_put_contents("./video",$res);复
首先明确Bean的生命周期:首先注册Bean的定义信息;然后创建Bean的实例;最后初始化Bean,放入容器中。按照执行的顺序,可以分为以下几个步骤:BeanDefinitionRegistryPostProcessor是在注册Bean定义信息前后调用; BeanFactoryPostProcessor是在创建Bean前后调用; BeanPostProcessor是在初始化Bean前后调用;复制其中BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子类,所以可以使用前者代替后者实现功能。查看IOC容器创建时的调用流程,refresh方法的代码如下://Allowspost-processingofthebeanfactoryincontextsubclasses. postProcessBeanFactory(beanFactory); //Invokefactoryprocessorsregisteredasbeansinthecontext. invokeBeanFactoryPostProcessors(be
序本文主要研究一下dubbo-go的GenericFilterGenericFilterdubbo-go-v1.4.2/filter/filter_impl/generic_filter.goconst( //GENERIC //genericmodulename GENERIC="generic" ) funcinit(){ extension.SetFilter(GENERIC,GetGenericFilter) } //whendoagenericinvoke,structneedtobemap //GenericFilter... typeGenericFilterstruct{}复制GenericFilter的init方法设置了GetGenericFilterGetGenericFilterdubbo-go-v1.4.2/filter/filter_impl/generic_filter.go//GetGenericFilter... funcGetGenericFilter()filter.Filter{ return&GenericFil
如果你看过秒杀系统的流量监控图的话,你会发现它是一条直线,就在秒杀开始那一秒是一条很直很直的线,这是因为秒杀请求在时间上高度集中于某一特定的时间点。这样一来,就会导致一个特别高的流量峰值,它对资源的消耗是瞬时的。但是对秒杀这个场景来说,最终能够抢到商品的人数是固定的,也就是说100人和10000人发起请求的结果都是一样的,并发度越高,无效请求也越多。但是从业务上来说,秒杀活动是希望更多的人来参与的,也就是开始之前希望有更多的人来刷页面,但是真正开始下单时,秒杀请求并不是越多越好。因此我们可以设计一些规则,让并发的请求更多地延缓,而且我们甚至可以过滤掉一些无效请求。为什么要削峰为什么要削峰呢?或者说峰值会带来哪些坏处?我们知道服务器的处理资源是恒定的,你用或者不用它的处理能力都是一样的,所以出现峰值的话,很容易导致忙到处理不过来,闲的时候却又没有什么要处理。但是由于要保证服务质量,我们的很多处理资源只能按照忙的时候来预估,而这会导致资源的一个浪费。这就好比因为存在早高峰和晚高峰的问题,所以有了错峰限行的解决方案。削峰的存在,一是可以让服务端处理变得更加平稳,二是可以节省服务器的资源成本。
跟着西瓜兄弟学算法老大:我简单给你讲下吧,你学过那么多排序,估计一看就懂了。基数排序,是一种基数“桶”的排序,他的排序思路是这样的:先以个位数的大小来对数据进行排序,接着以十位数的大小来多数进行排序,接着以百位数的大小……排到最后,就是一组有序的元素了。不过,他在以某位数进行排序的时候,是采用“桶”来排序的,基本原理就是把具有相同个(十、百等)位数的数放进同一个桶里。我直接给你个例子吧,保证你一看就懂。例如我们现在要对这组元素来排序:由于我们是以每个数的某位数来排序的,这位数的范围是0-9,所以我们需要10个桶。第一遍,先以个位数排序,把具有相同个位数的数放进桶里,结果如下:之后再按照从0号桶到9号桶的顺序取出来,结果如下个位数排序完成。第二遍,以十位数来排,结果如下:再取出来放回去:十位数排序完成,最终的结果就是一组有序的元素。如果元素中有百位数的话,大不了就按照百位数再给他重复排一遍。老二:那我想问下,为啥要从个位数开始排序呢?可以直接从最高位开始排序吗?如果从最高位开始排序的话,如果一个数最高位比另一个数大,那么这个数就一定比另外一个数大了,不用在比较次高位了。这样的话,不是可以
想要在Yii2这个PHP框架中很好的使用redis键值存储,那么首先就要推荐yii2-redis这个官方的Github库。这个库能够很好的帮助我们在Yii2框架中使用redis,它提供缓存,Session以及ActiveRecord模式的支持。安装yii2-redis库推荐使用composer安装yii2-redis库,在你的项目根目录执行phpcomposer.pharrequire--prefer-distyiisoft/yii2-redis:"~2.0.0"复制或者将"yiisoft/yii2-redis":"~2.0.0"复制加入你的composer.json文件里,之后运行composerupdate,墙内真的很慢,耐心等待即可。配置redis要正确的使用这个扩展,你必须在你的应用程序的配置文件内,配置Connection类,一般来说,配置文件是config\web.php。在你的组件里加入redis项目,如下:return[ //.... 'components'=>[ 'red
说起来我一直没有安装过Windows服务器版的系统,所以最近想尝试一下WindowsServer2016,这个最新的Windows服务器系统。当然如果是家用的话,肯定还是安装桌面版的系统更好,服务器版的系统主要是企业使用,日常功能反而不如桌面版的丰富。想要体验新系统无非两种办法,虚拟机和真机安装。虚拟机虽然方便,但是性能不太好。但是真机安装需要额外的空白分区。但是对于Windows系统来说,有一个办法可以兼具这两点的优势,既是真机安装,同时又不需要分区,这就是VHD(虚拟硬盘)功能。今天我顺便来试试VHD这个方便的功能,不过它好像只支持Windows系统。本文需要EasyBCD修改多次系统启动项,所以需要先下载和安装该软件,还需要一个虚拟光驱软件用来加载ISO文件。本文使用的命令大多数都需要管理员权限的Powershell才能运行,在操作时请格外注意,我就因为不小心把E盘给格式化了。下载WindowsServer2016镜像首先下载系统镜像,我一开始想尝试在微软官网上下载,但是发现需要注册比较麻烦。所以这里到MSDN我告诉你上下载,在这个网站上还可以下载所有其他Windows系统镜像、
大家好,我是二哥呀。每天早上的上班途中,我都会刷一会逼乎,除了看看自己有哪些装逼的回答被点赞之外,还想在知乎上刷到一些高营养高质量的帖子。虽然高质量的帖子越来越少,但刷100个里面还是能遇到一两个的。比如说今天分享的这篇:“中国的铁路订票系统在世界上属于什么水平?”再比如说我这个被382人赞同的关于高考填志愿的帖子。讲良心话,我这个帖子还是非常高质量的,如果你身边有亲戚朋友想问计算机专业方面的问题,可以把这个帖子转发给他,全文近一万字,全部干货。给大家先预览一部分内容,后面等高考分数出来,我再修改一版发到公众号。我当年读大学的时候根本就不知道计算机专业还可以分这么细!高考完填报志愿的时候,第一志愿填的机械自动化,然而没有录取上,就调剂到了计算机网络专业了,糊里糊涂地就上了!谁能想到,计算机专业这么香!本来是作为学校的垃圾专业,结果完全吊打其他专业。有一说一,我不是985、211的学长,但选计算机专业就对了,不要关什么卷不卷的问题,各行各业随着大学生数量的增加,哪能不卷呢?计算机卷,是因为它热门!为什么热门,是因为它工资高、岗位多!嗯,千万不要被一些大佬无脑劝退了!我记得当时,学校安排的
功能说明如果返回结果中存在Error字段,则表示调用API接口失败。例如: { "Response":{ "Error":{ "Code":"AuthFailure.SignatureFailure", "Message":"Theprovidedcredentialscouldnotbevalidated.Pleasecheckyoursignatureiscorrect." }, "RequestId":"ed93f3cb-f35e-473f-b9f3-0d451b8b79c6" } }复制 Error中的Code表示错误码,Message表示该错误的具体信息。 错误码列表公共错误码 错误码 说明 ActionOffline 接口已下线。 AuthFailure.InvalidAuthorization 请求头部的Authorization不符合腾讯云标准。 AuthFailure.InvalidSecre
层次聚类和DBSCAN 前面说到K-means聚类算法,K-Means聚类是一种分散性聚类算法,本节主要是基于数据结构的聚类算法——层次聚类和基于密度的聚类算法——DBSCAN两种算法。 1.层次聚类 下面这样的结构应该比较常见,这就是一种层次聚类的树结构,层次聚类是通过计算不同类别点的相似度创建一颗有层次的树结构,在这颗树中,树的底层是原始数据点,顶层是一个聚类的根节点。 创建这样一棵树的方法有自底向上和自顶向下两种方式。 下面介绍一下如何利用自底向上的方式的构造这样一棵树: 为了便于说明,假设我们有5条数据,对这5条数据构造一棵这样的树,如下是5条数据: 第一步,计算两两样本之间相似度,然后找到最相似两条数据(假设1、2两个最相似),然后将其merge起来,成为1条数据: 现在数据还剩4条,然后同样计算两两之间的相似度,找出最相似的两条数据(假设前两条最相似),然后再merge起来: 现在还剩余3条数据,然后继续重复上面的步骤,假设后面两条数据最相似,那么: 然后还剩余两条数据,再把这两条数据merge起来,最终完成一个树的构建: 上
《Unix/Linux网络日志分析与流量监控》获2015年度最受读者喜爱的IT图书奖。刊登在《中华读书报》(2015年01月28日19版) 我的2015年新作刊登在《中华读书报》(2015年01月28日19版) 原文下载:http://epaper.gmw.cn/zhdsb/images/2015-01/28/19/2015012819_pdf.pdf 这3本原创Linux图书,全部收录于中国科学院图书馆、国图以及211、985高校图书馆,广获读者好评,在当当、京东、天猫等电商,图书累计销售量近4万册,电子版图书的阅读量过50万。 今年秋天,本人的又一本原创作品《开源安全监控平台企业最佳实践》,将由清华大学出版社出版,敬请期待!
jQuery事件委托 <ulid="ulBox"> <lidata-id="1"></li> <lidata-id="2"></li> <lidata-id="3"></li> </ul> $("#ulBox").on('click','li',function(){ console.log($(this).attr("data-id")); })复制 on()事件相当于是$(document).click(function(){if(点击的是btn){}}),给document添加了一个click事件,党点击的是btn,事件冒泡原理,从里到外,就相当于点击了document,那么就会执行后面的操作,本质上只给document添加了一个事件,而click()事件是给所有btn添加了click事件。 另外on()事件可以添加多个事件。 on()委托事件的优点:原来的事件绑定,要绑定好多事件,现在只需要绑定一个事件,大大提高了效率和页面性能,解决的动态添加元素导致不能触发的bug。 Jq1
题意: 有\(n(1\leqn\leq10^5)\)个点,\(q(1\leqq\leq10^5)\)条路和起点\(s\) 路有三种类型: 从点\(v\)到点\(u\)需要花费\(w\) 从点\(v\)到区间\([l,r]\)中的点花费为\(w\) 从区间\([l,r]\)中的点到点\(v\)花费为\(w\) 求起点到各个点的最少花费 分析: 如下图,构建两颗线段树,边的花费都为\(0\) 对于第一种路直接加边即可 对于第二种路,添加从\(v\)到上面线段树对应区间中的点的边 对于第三种路,添加从下面线段树对应区间中的点到\(v\)的边 最后直接跑最短路 #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<set> #include<vector> #include<iostream> #include<string> #include<queue> usingnamesp
前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它。虽然在前面的博文StackedCNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好。而本文的主要目的是介绍CNN参数在使用bp算法时该怎么训练,毕竟CNN中有卷积层和下采样层,虽然和MLP的bp算法本质上相同,但形式上还是有些区别的,很显然在完成CNN反向传播前了解bp算法是必须的。本文的实验部分是参考斯坦福UFLDL新教程UFLDL:Exercise:ConvolutionalNeuralNetwork里面的内容。完成的是对MNIST数字的识别,采用有监督的CNN网络,当然了,实验很多参数结构都按照教程上给的,这里并没有去调整。 实验基础: CNN反向传播求导时的具体过程可以参考论文NotesonConvolutionalNeuralNetworks, JakeBouvrie,该论文讲得很全面,比如它考虑了pooling层也加入了权值、偏置值及非线性激发(因为这2种值也需要learn),对该论文的解读可参考zouxy09的博文CNN卷积神经网络推
Jenkins安装方法有很多,本文主要介绍通用安装方式(傻瓜式安装) 一、下载 进入https://jenkins.io/download/ ,按需下载。如用于生产,建议下载Long-termSupport(LTS) 版本,这样能够获得相对长期的维护;如想体验最新的功能,可尝试 Weekly 版本。可以直接下载特定系统专属的版本,也可下载 GenericJavapackage(.war) 。本文下载的是 GenericJavapackage(.war) ,这样对所有系统都通用。 二、安装 本文采用Tomcat安装方式,首先需要安装Tomcat(Tomcat安装方法请自行百度),将下载下来的Jenkins.war包放到Tomcat的webapps目录下,然后启动Tomcat即可 启动后会在webapps目录下生成一个Jenkins文件夹,然后我们访问http://localhost:18080/jenkins,即可看到如下界面
Windows系统编程之进程间通信 作者:北极星2003 来源:看雪论坛(www.pediy.com) 附件:windowipc.rar Windows 的IPC(进程间通信)机制主要是异步管道和命名管道。(至于其他的IPC方式,例如内存映射、邮槽等这里就不介绍了) 管道(pipe)是用于进程间通信的共享内存区域。创建管道的进程称为管道服务器,而连接到这个管道的进程称为管道客户端。一个进程向管道写入信息,而另外一个进程从管道读取信息。 异步管道是基于字符和半双工的(即单向),一般用于程序输入输出的重定向;命名管道则强大地多,它们是面向消息和全双工的,同时还允许网络通信,用于创建客户端/服务器系统。 一、异步管道(实现比较简单,直接通过实例来讲解) 实验目标:当前有sample.cpp, sample.exe, sample.in这三个文件,sample.exe为sample.cpp的执行程序,sample.cpp只是一个简单的程序示例(简单求和),如下: 代码: #include <iostream.h> int
首先说明下本次测试的浏览器版本: IETesterv0.4.12IE6-IE8 IE9.08112.16421 Chrome21.0.1180.83m Firefox16.0.1 Opera12.02 Safari5.17(7534.57.2) 1、INPUT文本框的基本属性 INPUT基础知识,鉴于篇幅,请移步W3SCHOOL学习。 http://www.w3school.com.cn/tags/tag_input.asp 2、INPUT文本框在不同浏览器下的表现 我们将一个INPUT文本框字符宽度设置为30,代码如下: <inputid="demo1"name="demo1"type="text"size="30"> 看看它在不同浏览器下面的样子吧: 从外观上看,IE各版本浏览器显示长宽是一样的,都为220x21px,但是边框样式上有所不同。 Chrome、Firefox、Safari、Opera的长宽以及边框则各不相同。 其实INPUT在不同浏览器中的区别远不止这些,每个浏览器为了保证网页在没有样式表的情况下能够正常显示,它们都自带了一套默认的CSS样