WIFI基础入门--802.11--用户身份验证--7

  • 1.优势
  • 2.可扩展身份验证协议(EAP)
    • 2.1 EAP的封包格式
      • 2.1.1 Code(类型代码)
      • 2.1.2 Identifier(标识符)
      • 2.1.3 Length(长度)
      • 2.1.4 Data(数据)
    • 2.2 EAP的请求与响应
      • 2.2.1 Type(类型)
      • 2.2.2 Type-Data(类型-数据)
        • 2.2.2.1 类型代码1:Identity(身份)
        • 2.2.2.2 类型代码2:Notification(通知)
        • 2.2.2.3 类型代码3:NAK(否定确认)
    • 2.3 EAP身份验证方式
    • 2.4 EAP认证成功与失败
    • 2.5 EAP交换流程
    • 2.6 EAP认证方式
      • 2.6.1 加密方式
      • 2.6.2 类型代码13:EAP-TLS
      • 2.6.3 类型代码21:EAP-TTLS与类型代码25:EAP-PEAP
    • 2.7 非加密式EAP认证方式
      • 2.7.1 类型代码4:MD-5 Challenge
      • 2.7.2 类型代码6:Generic Token Card(一般令牌卡)
      • 2.7.3 类型代码29:EAP-MSCHAP-V2
      • 2.7.4 类型代码18:EAP-SIM与类型代码23:EAP-AKA
    • 2.8 其他的内层身份验证方式
      • 2.8.1 密码认证协议(Password Authentication Protocol简称PAP)
      • 2.8.2 质询握手认证协议(Challenge Handshake Authentication Protocol简称CHAP)
  • 3.802.1X的网络连接端口认证
  • 4.802.1X的架构及相关术语
  • 5.802.1X的帧过滤
    • 5.1 EAPOL的封装格式
    • 5.2 MAC标头
    • 5.3 Ethernet Type
    • 5.4 Version
    • 5.5 Packet Type
    • 5.6 Packet Body Length
    • 5.7 Packet Body
  • 6.802.1X与无线局域网
    • 6.1 802.1X交换流程
    • 6.2 动态产生密钥

1.优势

静态WEP只是对拥有加密密钥的机器进行身份验证,802.1X则允许网管人员对用户而非机器进行身份验证,同时可以确保用户连接至合法并且经过授权而非窃取个人数据的冒牌网络。识别用户(而非机器)的身份可以让网络架构更有效率。如此一来,就没有必要以功能来区分或者对物理位置上的物理连接端口实施安全管理;相反地,用户身份与访问权限均可整合进网络的交换结构中并且一路伴随用户。无线局域网通常会首先强制采用身份识别策略。
802.1X的复杂之处在于它本身只是一个框架。它是IEEE采用IETF的可扩展身份验证协议(Extensible Authentication Protocol,简称EAP)制定而成。EAP属于一种框架协议,最初规范于RFC 2284,后来经RFC 3748更新。允许协议设计人员打造自己的EAP认证方式,即用来进行交换操作的子协议。EAP认证方式可以有不同目的,因此通常根据特殊情况的需求采用不同的方式识别用户的身份。

2.可扩展身份验证协议(EAP)

802.1X的基础是EAP,由于近年来无线网络的发展,原本的EAP标准已经不再使用,更新后的版本请见RFC 3748。EAP是一种简单的封装方式,可以运行于任何的链路层,不过它在PPP链路上并未广泛使用。EAP的基本框架如以下图,在设计上是为了能够运行于任何的链路层以及使用各种身份验证方式。

Methods TLS AKA/SIM Token card
EAP EAP EAP EAP
Link layers PPP 802.3 802.11

2.1 EAP的封包格式

EAP的封包格式如下表,在PPP链路上使用时,EAP是由PPP帧所承载,协议编号为0xC227。EAP并不是非得运行在PPP之上,可以通过任何一种帧来承载。EAP封包包含下列字段:

PPP Header/LAN Header Code Identifier Length Data
variable 1 1 2 variable

2.1.1 Code(类型代码)

封包的第一个字段是Code(类型代码),其长度为1个字节,代表EAP封包的类型。封包的Data(数据)字段必须通过此字段来解析。

2.1.2 Identifier(标识符)

Identifier(标识符)字段的长度为1个字节,其内容为1个无符号整数,用来匹配请求与响应。重传时会使用相同的identifier number(标识符编号),新的传送则使用新的identifier number。

2.1.3 Length(长度)

Length(长度)字段本身占有2个字节,它记载了封包的总字节数,包括Code,Identifier,Length以及Data这4个字段。在某些链路层协议中,有时可能必须补零。EAP会假设所有操作Length字段所记载的长度的数据都是链路层额外添加的,因此可以忽略不计。

2.1.4 Data(数据)

最后一个是Data(数据)字段,其长度不定,取决于封包的类型,Data字段也可能不占用任何字节。Data字段如何解析完全取决于Code字段的值。

2.2 EAP的请求与响应

EAP的交换操作由请求与响应构成。认证者会送出请求给想要进行访问的系统,并根据所得到的响应决定是否允许进行访问。如果认证者已经送出请求,系统只能送出响应封包,不容许发送多余的封包来请求身份验证。请求与响应封包的格式如下表所示:

Code Identifier Length Type Type-Data
1bytes 1bytes 2bytes 1bytes variable

Code字段的值为1代表请求,2代表响应。Identifier与Length字段的用法,如上一节的基本格式所述。Data字段用来携带请求与响应所使用的数据。每个Data字段会携带一种数据,可细分为type identifier code(类型标识符)以及associated data(关联数据):

2.2.1 Type(类型)

Type(类型)字段的长度为1个字节,代表请求或响应类型。每个封包只能使用一种类型。唯一的例外是,响应的Type字段与其对应的请求一致。即当无法接受某个请求时,对方可以送出一个NAK来提议使用不同的类型。大于或等于4的Type字段值代表身份验证方式。

2.2.2 Type-Data(类型-数据)

字段长度不定,必须根据每种类型的规则加以诠释。

2.2.2.1 类型代码1:Identity(身份)

认证者通常会以Identity类型作为最初的请求,这一般以EAP-Request/Identity来表示或者简写成Request/Identity,表示认证者试图建立某种用户名称以便进行身份验证。通常EAP Identity即为用户身份,或者附带一些路由信息。有些技术的运作方式是送出对应于机器的EAP Identity。在一开始的Request/Identity封包中,如果有任何信息出现在Type-Data字段中,它就会被用来提示用户,虽然这比较不常见。如果Type-Data字段存在并且包含提示字符串,则此字符串长度可以从EAP封包的长度推论得知,不必另外使用界定符。
有些EAP实现可以提示用户输入必要的信息以判断其身份,有些EAP实现可能会送出认证质询信息之前试图找出用户的身份。如果用户不存在,整个认证过程就算失败,也不会再做进一步的处理。大部分的实现会再次送出身份请求以防用户打字错误。

2.2.2.2 类型代码2:Notification(通知)

认证者可以使用Notification(通知)类型传送消息给用户。用户的系统随后可将Request/Notification中的消息显示给用户看。Notification消息是由认证系统提供消息给用户,例如密码即将过期或者账号被锁定的原因。Notification消息在802.1x中并不常用。Notification请求的回复中必须由送出者响应。不过,Request/Notification属于简单的确认,而Type-Data字段的长度为0。

2.2.2.3 类型代码3:NAK(否定确认)

null acknowledgment(否定确认简称NAK)主要用来建议使用新的身份验证方式。认证者会在送出质询消息中指定身份验证所使用的类型代码。身份验证类型的代码为4及以上的数字。如果用户的系统不支持质询所使用的身份验证类型,可以回复NAK。

2.3 EAP身份验证方式

除了流量控制与协商消息,EAP也会为身份验证的方式指定类型代码。EAP会把证明用户身份的操作授权给一个称为EAP method的附属协议。
使用EAP method的不用去管验证用户的细节,可以开发新的EAP method来满足新的需求。如下表列出802.1X身份验证常用的EAP认证方式:

类型代码 身份验证协议 说明
4 MD5 Challenge EAP中类似CHAP的认证方式
6 GTC 原本打算与RSA SecurID之类的令牌卡一起使用
13 EAP-TLS 以数字证书互相认证
21 TTLS 隧道式TLS;以TLS加密保护较弱的身份验证方式
25 PEAP 防护型EAP;以TLS加密保护较弱的EAP认证方式
18 EAP-SIM 以移动电话的用户识别模块卡进行身份验证
29 MS-CHAP-V2 Microsoft的经加密的密码身份验证,兼容于Windows域

2.4 EAP认证成功与失败

在EAP交换结束之后,用户不是认证成功就是认证失败。一旦认证者判断出整个交换过程已经完成,就会发出一个EAP-Success或EAP-Failure帧,以结束整个EAP交换过程。实现时,在送出认证失败信息之前,允许用户送出多个请求信息,好让用户有机会获得正确的认证数据。

2.5 EAP交换流程

a.认证者发出一个Request/Identity封包以识别用户身份。Request/Identity封包有两个目的,除了启动交换过程外,也用来告诉客户端在身份验证完成之前网络将会丢弃任何传输数据。
b.客户端要求用户输入标识符,随后将所收集到的用户标识符以Response/Identify消息送出。
c.一旦认出该用户,认证者随即会送出认证质询。认证者以一个Request/MD5 Challenge封包送出给用户。
d.客户端在设定上是以token card进行身份验证,因此它会送出一个Response/NAK消息,提议以Generic Token Card作为认证机制。
e.认证者会送出一个Request/Generic Token Card的质询,要求取得卡号。
f.用户输入卡号,通过Response/Generic Token Card送回。
g.用户的响应并不正确,因此认证失败。不过,这个认证者在EAP的实现中允许多次认证,因此会送出第二个Request/Generic Token Card的质询。
h.用户再度响应,依然通过Response/Generic Token Card传递。
i.此次的响应正确,因此认证者发出一个Success消息。

2.6 EAP认证方式

可扩展性即是EAP最大的优点也是最大的缺点。可扩展性让协议能够在有新的需求浮现时开发新的功能。EAP之所以具有灵活性,关键在于它本身只是一个框架。

2.6.1 加密方式

EAP method的选择通常取决于后端所使用的身份验证系统。早期的EAP method主要将焦点放在如何提供与认证服务器之间的传输信道上。针对无线网络所设计的新型认证方式除了可以跟认证服务器进行通信,也符合无线局域网特有的三项要求:
a.为用户的数据提供坚固的加密防护
在定义上,无线局域网应该被视为一种开发媒介。若要确保安全,任何通过无线网络传送的数据都必须加以保护。大多数针对无线局域网所设计的EAP method均采用TLS来提供私密数据的加密防护。
b.互相认证
早期无线局域网协议的设计将身份验证视为接入点对用户提出的要求。除了用户的身份验证,客户端设备还必须验证他们所连接的网络是否正确无误。
c.派生密钥
使用手动定义的密钥的WEP机制只能为无线链路上的帧提供很少的保护。较坚固的安全防护协议必须使用动态密钥。

2.6.2 类型代码13:EAP-TLS

Transport Layer Security(传输层安全,简称TLS)协议原本就是设计用于易被窃听的链路层上。TLS的前身是确保安全网络事务的协议Secure Socket Layer(安全套接层,简称SSL)。TLS的目的就是在不可信赖的网络环境中建立一条可信赖的通信管道。

2.6.3 类型代码21:EAP-TTLS与类型代码25:EAP-PEAP

有两种EAP method能够搭配所谓的"旧式身份验证方式"一起使用,分别是隧道式TLS(Tunneled TLS,简称TTLS)与受保护的EAP(Protected EAP,简称PEAP)。
TTLS与PEAP的运作方式相似。首先,协议会使用类似于EAP-TLS的方式建立起一个TLS隧道。进行下一个步骤之前,会先使用认证服务器的数字证书来验证此网络是否可信赖。第二个步骤是使用TLS隧道为旧式的身份验证协议加密,然后以它验证用户身份。有时候第一个步骤也称为"外层"身份验证,因为它是用来保护第二个或者"内部"身份验证的隧道。
使用TTLS与PEAP的好处是,内层与外层身份验证可以使用不同的用户名称。这两种协议在进行外层身份验证时可以匿名进行,只有在加密信道中才会显示用户的真实身份。

2.7 非加密式EAP认证方式

若无坚固的加密防护,有些EAP method并不适合直接用于无线网络。不过,它们可以作为PEAP或TTLS的内层身份验证方式。

2.7.1 类型代码4:MD-5 Challenge

MD-5 Challenge相当于RFC 1994所规范的CHAP协议。身份验证请求中包含了给客户端的质询。客户端只要能够成功响应质询,就可以证明它的确握有共享密钥。所有的EAP实现必须支持MD-5 Challenge。不过,它在无线网络领域并未得到广泛使用,因为它无法在无线网络上提供动态密钥。

2.7.2 类型代码6:Generic Token Card(一般令牌卡)

在请求消息只能够包含了身份验证所需要的Generic Token Card信息,请求消息的Type-Data字段的长度必须大于零。在响应消息里,Type-Data字段用来携带从token card复制的消息。在请求与响应封包里,EAP封包的Length字段则是用来计算Type-Data请求消息的长度。

2.7.3 类型代码29:EAP-MSCHAP-V2

Microsoft CHAP version 2被设计用来解决MS-CHAP的缺陷,除了移除旧式客户端进行行密码编码时的弱点,还提供互相认证以及改善密钥生成与更换的机制。
MS-CHAP-V2广泛用于Microsoft工作站,通常作为内层身份验证方式并搭配PEAP一起使用。MS-CHAP-V2是Windows网域最常见的内层身份验证方式。作为EAP认证方式使用时,EAP-MSCHAP-V2可以搭配TTLS或者PEAP一起使用。

2.7.4 类型代码18:EAP-SIM与类型代码23:EAP-AKA

这两种方式以及通过标准制定流程,主要是通过移动电话数据库进行身份验证。

2.8 其他的内层身份验证方式

TTLS并不是只能搭配EAP method作为内层的身份验证方式

2.8.1 密码认证协议(Password Authentication Protocol简称PAP)

PAP规范于RPC 1334,原本是设计来和PPP一起使用。PAP以未经加密的方式在网络上传递用户名称与密码。PAP不能直接使用于无线网络,只能作为TTLS里的内层认证方式以确保不泄漏密码。PAP可以和任何类型的身份验证系统一起使用。

2.8.2 质询握手认证协议(Challenge Handshake Authentication Protocol简称CHAP)

和PAP一样,CHAP原本也是设计来和PPP一起使用的。使用CHAP进行认证时,认证服务器首先会发出质询信息给客户端,而客户端只要能够成功响应质询信息,就可以证明它的确握有共享密钥。

3.802.1X的网络连接端口认证

网络连接端的认证在拨号访问服务器已经使用广泛,IEEE采用PPP认证协议并开发了基于局域网络的版本。最后的标准称为802.1X,称为"基于端口的网络访问控制"。

4.802.1X的架构及相关术语

802.1X为认证会话过程定义了三个组件。申请者是寻求访问网络自由的用户。网络访问由认证者控制,它扮演着传统拨号网络中访问服务器的角色。申请者与认证者在规范说明书中称为端口认证实体(Port Authentication Entity,简称PAE)。认证者只负责链路层的认证交换过程,并不维护任何信息。任何认证请求均会被转送至认证服务器进行实际处理。
申请者与认证者之间(即前端)使用由802.1X所定义的EAPover LAN(简称EAPOL)协议,在后端则是通过RADIUS封包来传递EAP。就算连接端口尚未得到授权,也尚未取得IP地址,申请者还是能够持续与RADIUS服务器进行EAP交换。
802.1X只是一个框架,并非一套完整的规范。实际的认证机制其实是通过认证服务器来完成的。802.1X所提供的机制主要是用来发出质询信息以及确认或拒绝访问,实际并不负责判断对方是否有权访问。

5.802.1X的帧过滤

802.1X利用允许任何数据通过之前先经过认证,来防范网络被未经授权的用户访问。处于未授权的连接端口通常限定只能传送认证帧,其他数据都会被丢弃。802.1X标准对如何完成整个过程有正式的探讨。不过以本身而言,只要说明未授权的连接端口会丢弃所有非EAPOL帧就够了。一旦工作站成功验证,就可以将数据帧送至适当的网络。

5.1 EAPOL的封装格式

EAPOL的基本帧格式,此帧的组成字段如下:
a)EAPOL on Ethernet

Destination address Source address Ethernet type Version type body length body FCS
6 6 2 1 1 2 Variable 4

b)EAPOL on 802.11

Frame control Duration Address1 Address2 Address3 Seq DSAP SSAP Control RFC-1042 Ethernet type Version Packet type Packet body length Packet body FCS
2 2 6 6 6 2 1 1 1 3 2 1 1 2 Variable 4

5.2 MAC标头

有线Ethernet以及802.11的封装格式虽然有线载荷(payload)相同,但是两者所使用的MAC标头并不一致。

5.3 Ethernet Type

类型代码为88-8E。

5.4 Version

第一版标准于2001年版的802.1X,第2版规范于802.1X-2004。

5.5 Packet Type

EAPOL是EAP的扩展。

封包类型 名称 说明
0x00 EAP-Packet 包含了一个经过封装的EAP帧。大部分的帧均属EAP-Packet帧
0x01 EAPOL-Start 申请者可以主动送出EAPOL-Start帧,不必等待来自认证者的质询信息。认证者会送出一个EAP-Request/Identity帧作为响应
0x02 EAPOL-Logoff 当某个系统不再需要使用网络时,便可发出一个EAPOL-Logoff帧,让连接端口重新回到未授权状态
0x03 EAPOL-Key EAPOL可用来交换加密密钥信息
0x04 EAPOL-Encap-sulated-ASF-Alert 警告标准讨论(ASF)定义了一种方式,可让警告信息通过此类型的帧传送到未授权的连接端口。

5.6 Packet Body Length

此字段本身的长度为2个字节,用来计算Packet Body(封包主体)字段的长度。

5.7 Packet Body

此字段的长度不定,EAPOL-Start与EAPOL-Logoff消息除外,此字段会出现于所有的EAPOL帧中。EAP-Packet帧所封装的是一个EAP封包,EAPOL-Key帧所封装的是一个密钥,而EAPOL-Encapsulated-ASF-Alert帧所封装的则是一段警告信息。

6.802.1X与无线局域网

无线网络中802.1X的连接端口,相当于无线设备与接入点之间的关联。当链路层开始起作用时,Association Request与Association Response帧交换成功的信息会告知802.1X状态引擎。一旦关联成功,工作站就可以开始进行802.1X帧交换过程,尝试取得授权。802.1X认证交换与密钥分配完成后,用户就会收到接口已经启用的信息。

6.1 802.1X交换流程

EAPOL交换与EAP交换看起来几乎一样,主要的差别在于申请者可以发出EAPOL-Start帧触发EAP交换,也可以在网络使用完毕后发出EAPOL-Logoff消息解除连接端口的授权。
a.申请者关联至802.11网络。关联只用到两个帧,这种简单的交换过程几乎都会成功。
b.申请者发出一个EAPOL-Start消息,开始进行802.1X交换过程。这个步骤并非必要,并非所有申请者都会送出EAPOL-Start消息,因此可能没有这个步骤。
c.正常的EAP交换过程开始。认证者(接入点)发出一个EAP-Request/Identity帧。如果接入点只为已经认证成功的关联转送帧,在发送Request/Identity帧之前可能就没有EAPOL-Start。主动发出的Request/Identity帧用来指示申请者必须进行802.1X认证。
d.申请者以EAP-Response/Identity帧进行回复,此帧随后被转换为Radius-Access-Request封包送给RADIUS服务器。
e.RADIUS服务器判断需要使用哪个类型的认证,并且在送出的EAP-Request信息中指定认证方式的类型。EAP-Request被封装于Radius-Access-Challenge封包中送给接入点。接入点收到封包即将EAP-Request传递给申请者。EAP-Request信息通常会被表示为EAP-Request/Method,其中的Method代表所使用的EAP认证方式。如果目前使用的是PEAP,则返回的封包将以EAP-Request/PEAP来表示。
f.申请者从用户方面取得响应,然后返回EAP-Response。认证者将会响应转换为送给RADIUS的Radius-Access-Request封包,针对质询信息所作的响应则存放于数据字段中。步骤e与步骤f不断重复进行,直到认证完成为止。如果使用的是需要交换证书的EAP认证方式,免不了要多次重复这些步骤。有些EAP交换可能需要在客户端与RADIUS服务器之间反复进行10到20次。
g.既然RADIUS服务器送出一个Radius-Access-Accept封包允许对方访问网络,因此认证者会送出一个EAP-Success帧并且授权使用连接端口。访问权限也可以由RADIUS服务器所返回的参数来决定。
h.收到Access-Accept封包后,接入点会立即使用EAPOL-Key消息将密钥分配给申请者。
i.一旦申请者安装好密钥,就可以开始传送数据帧来访问网络。
j.当申请者不再需要访问网络,就会送出一个EAPOL-Logoff消息,使连接端口恢复成未授权状态。

交换过程可以在任何时间点进行,用户并不需要发出EAPOL-Start消息来启动EAPOL交换过程。任何时刻,申请者都可以开始进行EAPOL交换过程,发出EAP-Request/Identity帧来更新认证数据。需要重新进行认证通常是因为会话超时,此时就必须更新密钥。

6.2 动态产生密钥

EAPOL-Key帧让接入点能够传送密钥给客户端。密钥交换帧只有在认证成功之后才会传送,这样可以避免密钥信息外泄。EAPOL-Key帧也可以用来定期动态更新密钥。

WIFI基础入门–802.11–TKIP/CCMP/RSN–8

温馨提示:
以上文章描述如有不清晰之处,欢迎在评论区评论,如有时间,会第一时间回复,谢谢!

WIFI基础入门--802.11--用户身份验证--7相关推荐

  1. WIFI基础入门--802.11--跳频物理层(FH/FHSS)--11

    WIFI基础入门--802.11--跳频物理层FH/FHSS--11 1.跳频传输 2.信道分布 3.跳频序列 4.加入跳频网络 5.ISM发射量规定与最大吞吐量 6.干扰效应 7.高斯频移键控(GF ...

  2. WIFI基础入门--802.11--TKIP/CCMP/RSN--8

    WIFI基础入门--802.11--TKIP/CCMP/RSN--8 1.临时密钥完整性协议(TKIP) 1.1 TKIP与WEP的差异 1.2 密钥层次结构与自动密钥管理 1.3 每帧生成密钥 1. ...

  3. WIFI基础入门--802.11--管理操作--9

    WIFI基础入门--802.11--管理操作--9 1.管理结构 2.扫描 2.1 被动扫描 2.2 主动扫描 2.3 扫描报告 3.加入网络 4.隐藏式SSID 5.身份验证 5.1 身份验证 5. ...

  4. WIFI基础入门--802.11--成帧细节(管理帧)--5

    WIFI基础入门--802.11--成帧细节--管理帧--5 1.概述 2.管理帧的结构 2.1 计算持续时间 2.2 帧主体 3.固定字段 3.1 Authentication Algorithm ...

  5. WIFI基础入门--802.11--MAC基础--2

    WIFI基础入门--802.11--MAC基础--2 1.故障排查工具 2.优化无线网络 3.关键点 4.面临挑战 4.1 射频链路质量 5.隐藏节点 6.访问模式与时机 6.1 DCF(分布式协调功 ...

  6. WIFI基础入门--802.11--直接序列物理层(DSSS)--12

    WIFI基础入门--802.11--直接序列物理层DSSS--12 1.直接序列传输 2.编码方式 3.无线电频谱 3.1 信道能量的分布 3.2 邻道抑制与信道隔离 3.3 最大吞吐量(理论值) 3 ...

  7. WIFI基础入门--802.11k--无线局域网络频谱测量

    WIFI基础入门--802.11k--无线局域网络频谱测量 1.介绍 2.定义 3.缩写和首字母缩写 4.无线局域网无线电测量(Wireless LAN Radio Measurements) 4.1 ...

  8. WIFI基础入门--802.11--高速直接序列物理层(HR/DSSS)--13

    WIFI基础入门--802.11--高速直接序列物理层HR/DSSS--13 1.概述 2.PLCP成帧与扰频 3.PMD 3.1 以1.0Mbps或2.0Mbps进行传输 3.2 以CCK进行5.5 ...

  9. 使用React,Spring Boot和用户身份验证构建CRUD应用程序

    建筑物身份管理,包括身份验证和授权? 尝试Stormpath! 我们的REST API和强大的Java SDK支持可以消除您的安全风险,并且可以在几分钟内实现. 注册 ,再也不会建立auth了! Re ...

最新文章

  1. C# linq创建嵌套组
  2. 11个强大的Visual Studio调试小技巧
  3. 全球及中国石墨烯行业发展格局及投资盈利分析报告2021年版
  4. 无性别服饰是趋势,但不该只停留在“中性”
  5. python中的cli模块_Python 快速实现CLI 应用程序的脚手架
  6. WAMP PHP开发环境
  7. php定时备份mysql,Windows服务器中PHP+MySQL设置定时备份
  8. iis 7 安装php环境_iis7配置php环境图文教程
  9. Windows 常用软件清单
  10. lnmp 一键安装
  11. 北卡州立大学计算机科学硕士,2020年北卡罗来纳州立大学一年制硕士含金量
  12. LeetCode-Hot100-两数相加
  13. 微信小程序源代码_下厨房菜谱APP
  14. 射线法进行地理空间坐标计算
  15. 算法的时间复杂度取决于:
  16. 嵌入式设备的switch 以及PHY 芯片调试和选型 (1)
  17. 银河麒麟V10 SP1服务版虚拟机安装
  18. 织梦html伪静态页面,dedecms织梦全站伪静态设置+全套伪静态规则
  19. typescript 提示 Object is possibly null
  20. javaScript 原型 和 原型链

热门文章

  1. 【板栗糖GIS】如何批量获取CAD格式的xy坐标值
  2. 苹果vs剪辑下载_苹果自带APP到底有多好用?这六款你真的要用起来
  3. 删除文件夹时,提示访问被拒、权限不足。如何解决?
  4. kobo touch N905B刷Koreader
  5. jQuery仿苏宁易购导航
  6. 电信机顶盒怎么连接鸿蒙系统电视,「天翼高清电视」电信高清机顶盒怎么连接电视 - 鲲鹏装修网...
  7. 高德地图Amap离线地图的使用
  8. 高德离线地图开发 java_自定义地图-创建地图-开发指南-Android 地图SDK | 高德地图API...
  9. OLI.System.2010 2CD
  10. 电梯程序c语言51单片机,基于51单片机的六层电梯控制系统c语言程序.pdf