基础知识库

本专题用于记录作为一个安全人员必备的一些知识点,内容包括linux/unix基本操作命令。路由交换配置等信息。

3GPP介绍及文档导读

0 背景

在平时的电信协议和业务的研究过程中,标准看的非常多。在查阅3GPP相关标准时会对其浩瀚的文档结构及编号产生恐惧感。本章将为您讲述如何去查找3GPP文档以及如何读懂其特有的文档编号。

1 3GPP组织介绍

3GPP的全称是3rd Generation Partnership Project,中文翻译为第三代合作伙伴计划。它是领先的3G技术规范机构,是由欧洲的ETSI,日本的ARIB和TTC,韩国的TTA以及美国的T1在1998年底发起成立的,旨在研究制定并推广基于演进的GSM核心网络的3G标准,即WCDMA,TD-SCDMA,EDGE等。中国无线通信标准组(CWTS)于1999年加入3GPP。3GPP的目标是实现由2G网络到3G网络的平滑过渡,保证未来技术的后向兼容性,支持轻松建网及系统间的漫游和兼容性。

3GPP最初的工作范围是为第三代移动系统制定全球适用技术规范和技术报告。第三代移动系统基于的是发展的GSM核心网络和他们所支持的无线接入技术。随后3GPP的工作范围得到了改进,包括为移动通信(GSM)技术规范和技术报告包括发展的无线接入技术(包括GPRS和EDGE)维护和制定全球系统。

3GPP由项目协调组(PCG)和技术规范组(TSGs)组成,如需要,各技术规范组可建立工作组。如下图示为3GPP的组织结构图:

关于3GPP组织更多的信息您可以访问http://www.3gpp.org/About/about.htm

2 规范导读及文档命名规则

我们在查阅3GPP文档时,在文档的最上方都会见到类似于3GPP TS 23.140 V6.15.0 (2008-03)这样的字符串,他们有什么特别的意思吗?

我们首先要理解,3GPP的文档分为TR和TS两种,分别对应Technical Reports(技术报告)和Technical Specification(技术规范)。

其次,3GPP的文档针对不同的领域分为了不同的系列(series),下表对这些系列对应的领域进行了划分:

Subject of specification series
3G/GSM R99 and later
GSM only (Rel-4 and later)
GSM only (before Rel-4)
General information (long defunct)     00 series
Requirements 21 series 41 series 01 series
Service aspects ("stage 1") 22 series 42 series 02 series
Technical realization ("stage 2") 23 series 43 series 03 series
Signalling protocols ("stage 3") - user equipment to network 24 series 44 series 04 series
Radio aspects 25 series 45 series 05 series
CODECs 26 series 46 series 06 series
Data 27 series 47 series (none exists) 07 series
Signalling protocols ("stage 3") -(RSS-CN) 28 series 48 series 08 series
Signalling protocols ("stage 3") - intra-fixed-network 29 series 49 series 09 series
Programme management 30 series 50 series 10 series
Subscriber Identity Module (SIM / USIM), IC Cards.  Test specs. 31 series 51 series 11 series
OAM&P and Charging 32 series 52 series 12 series
Access requirements and test specifications   13 series (1) 13 series (1)
Security aspects 33 series (2) (2)
UE and (U)SIM test specifications 34 series (2) 11 series
Security algorithms (3) 35 series 55 series (4)
Evolved UTRA aspects 36 series - -

Note (1):  The 13 series GSM specifications relate to European-Union-specific regulatory standards.  On the closure of ETSI TC SMG, responsibility for these specifications was transferred to ETSI TC MSG, (Mobile Specification Group) and they do not appear on the 3GPP file server. 

Note (2): The specifications of these aspects are spread throughout several series.

Note (3): Algorithms may be subject to export licensing conditions.  See the relevant 3GPP page.  See also the relevant ETSI pages.  

Note (4): The original GSM algorithms are not published and are controlled by the GSM Association.

可以看到,我们举例的23.140其实对应23系列,也就是针对3G/GSM R99以后的Technical realization ("stage 2")。从上表也可以看出,文档中有Stage 1,2,3之分。Stage 1规范了从服务使用者的角度阐述的一个服务;Stage 2规范描述了对需要解决的问题的逻辑分析;Stage 3就是技术实现。

在大的版本后面又有小编号,就是示例中的140,我们进入到http://www.3gpp.org/ftp/Specs/html-info/23-series.htm看到文中有一个大表格,纤细的列出了不同的小编号对应的功能描述。140对应的就是"Multimedia Messaging Service (MMS); Functional description; Stage 2”。

后面的V6.15.0表示修改的版本号。

3 参考资料

  1. http://www.3gpp.org/
  2. http://www.3gpp.org/specs/numbering.htm

C++ Builder常见错误解决方案

1.提示找不到[DCC Error] DesignEditors.pas(609): F1026 File not found: 'Proxies.dcu'

在Delphi Complier中的Other Options标签页下的Use these packages when compling输入框中输入DesignIde

2.提示bcc32错误,编译路径有问题

检查<USER_DIR>\AppData\Roaming\Borland\BDS\5.0\EnvOptions.proj文件中的路径表示,不能带有双引号。

3.编译TEECHART时提示Tee812.dpk(32) Fatal: E2202 Required package 'vcljpg' not found
  1. 将 vcljpg 改为 vclimg
  2. 将 TeeExport.pas 的第1031行
    {$DEFINE USE_MAPI}
    改为
    {.$DEFINE USE_MAPI}
4.提示DesignIntf的错误

在src目录中加入{Program Files}\CodeGear\RAD Studio\5.0\source\ToolsAPI;重新编译即可。

CB 编程技巧

CB是个好东西,使用了这么久,其实也有很多知识需要沉淀先来的……

doxygen学习专题

基础知识

 

常用指令  

 指令 描述  示例代码  参考 
 file  文件    
 defgroup  分组、模块    
 addgroup  加入组、模块。实际上与defgroup好像没有区别。    
 ingroup  指明上一级模块    
 param  参数    
 return  函数返回值    
 retval  函数返回值,与上一个区别在于可以指定多个值。    
 mainpage  自定义主页    
 section  章节    
 code  想在说明文字中加入代码说明的话,使用code和endcode包含可以在生成的页面中带有色彩标记。

@code
示例:
in_addr             ia;
ia.S_un.S_addr = ns_get_next_hop("192.168.1.1");
printf("Next Hop IP Address is : %s\n", inet_ntoa(ia));
@endcode 

 

FAQ

1.如何让doxygen解析宏定义?

如下一种情况我们可能会遇到。我们制定的是一个DLL库文件,我们通过如下宏定义导出一个函数:

#if defined(NSPR_EXPORTS)
#define NS_DECLARE(type)            __declspec(dllexport) type __stdcall
#endif

那么在定义函数时我们可能使用如下语句:

NS_DECLARE(void) func();

这时doxygen默认生成的页面将是一样的文字,这显然不是我们想要的,这时可以在"Expert"->"Preproccessor"标签下选中"MACRO_EXPANSION"即可。

NOSEC开发环境

1.编程环境
  1. Codegear C++ Builder 6/2006/2007/2009
  2. Virual Stuio 6/2003/2005/2008

2.源代码管理

  1. VisualSVN Server
    http://www.visualsvn.com/server/download/

3.编译管理

  1. FastBuild

控件

  1. Virtual Treeview
    http://www.soft-gems.net/
  2. Raize
    http://www.raize.com/DevTools/RzComps/Default.asp
  3. FastReport
    http://www.fast-report.com/
  4. TeeChart
  5. Berg.Next.Component.Suite

UltraEdit使用技巧小结

必备工具,有许多技巧需要学习的,这里整理了一些供大家参考:

1 没有注册码,如何有效使用Ultraedit呢?

很多人立即想到使用crack版,可实际追究起来,那是违法的事情。实际上,Ultraedit并没有把路子完全堵死。我们可以使用一些小技巧来屏蔽掉这个问题。修改ultraedit的快捷方式,将命令行改为:E:uedit9UEDIT32.EXE p:,其中p:必须是你的机器上不存在的分驱,这样,就不会有试用时间结束的问题了。

2 如何去掉所编辑文本中包含特定字符串的行? 

这则技巧是在UltraEdit的帮助文件里提到.CTRL+R 调出来替换(Replace)窗口,选中"使用正则表达式";然后用查找 %*你的字符串*^p 替换成空内容即可.如,我当前有个文本文件,需要去掉所有包含 http://www.nosec.org 这个字符串的行,查找 %*http://www.nosec.org/*^p 替换成空即可.注意,^p 是 DOS 文件类型的换行符.如果是 Unix 类型文件,则用 ^n.

3 如何删除空行?

参考上面两个例子,查找 ^p$ 然后替换为空即可.

4 快速转到指定行

简单,CTRL+g,在弹出的对话框中输入行号即可。

5 查看16进制格式

Ctrl+h即可。

Web Service相关概念的介绍

好吧,我不得不承认我对Web Service的理解也不多,至于为什么我非得把它做一个专题放在这里是因为它现在是所有电信运营商的基础架构,几乎所有的运营商一提到接口就整个Web Service堵住你。so, 我不得不屈服于这种鄙视,并且打心眼里就认同Web Service是一个很棒的东西。

我估计有很多朋友也跟我一样,很难清晰的描述出它的有点,大都由于客户或者公司规定要这样实现,毕竟它是大势所趋。 如果你很难说服自己接受这样一个模糊的概念的话,那么建议你可以先看看:http://www0.ccidnet.com/tech/guide/2001/11/01/58_3584.html

简而言之就是,它能让异构的产品统一接口化。再总之,咱们记住这样一个概念就好了:如果你还想混下去,那么你一定得知道Web Service。

让你接受这个概念很难, 然而学习Web Service却是一件非常简单的事情,我们根据如下的一些很简单的理解来学习一下:

  1. Web Service也是承载与传统的Web服务器之上的,使用的还是HTTP协议
  2. 传统的HTTP协传输的内容通常是HTML格式,而Web Service传输的标准的XML协议格式
  3. 为了更好的让大家更清晰的知道这个是Web Service,标准组织说我们要将之规范话,这样吧,当你们抓包看到HTTP+XML的数据报文,且XML数据中有SOAP字样的话,那么这就是Web Service了。而这种规范话的结果就是产生了SOAP(Simple Object Access Protocol)协议。大家理解有SOAP这个东西就行了,暂时不用深究。
  4. 要理解一个概念是:Web Service可以类似于c++语言中的类库调用。事实上,我们可以这样理解,每一次Web Service交互都是一个函数调用,客户端提供函数名称和参数值。服务器在处理完成以后再返回结果给客户端就OK了。
  5. 开发人员在调用函数时可以参考MSDN或者一些SDK开发文档,因为里面定义了函数名称和参数。在Web Service中也是有的,那就是WSDL(Web Service Description Language)。它完整了描述了我这个类或者名字空间有哪些函数可以供你调用,你需要输入几个参数,每个参数的类型是怎么样的。
一个典型的SOAP消息报文

POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetStockQuoteResponse xmlns:m="urn:xmethods-quotes">
<Price>34.5</Price>
</m:GetStockQuoteResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

一个典型的WSDL文件内容

我们可以查看http://atom.research.microsoft.com/sensordatahub/service.asmx?WSDL
这是微软对外提供的一个接口
此外也可以看这里:http://api.google.com/GoogleSearch.wsdl
这就是Google对外提供的用于搜索的Web Service接口

在WSDL定义中,我们可以按照如下方式去记忆:

入侵检测分析

傻眼了吧,被黑了吧。如何解决呢?这里给大家列举了一些方法:

 

日志分析

日志可是最最重要的一块内容。

步骤1

步骤2

步骤3

 

审核Windows登录事件

登录事件 描述

528

用户已成功登录计算机。有关登录类型的相关信息,请参阅下面的登录类型表。

529

登录失败。尝试使用未知用户名或密码无效的已知用户名登录。

530

登录失败。用户帐户尝试在允许的登录时间之外登录。

531

登录失败。尝试使用禁用的帐户登录。

532

登录失败。尝试使用过期的帐户登录。

533

登录失败。尝试使用被禁止登录该计算机的用户帐户登录。

534

登录失败。用户尝试使用被禁止的登录类型登录。

535

登录失败。指定的帐户密码已过期。

536

登录失败。未激活网络登录服务。

537

登录失败。由于其他原因致使尝试登录失败。

注意

在某些情况下,可能无法知道登录失败的原因。

538

完成某个用户的注销过程。

539

登录失败。尝试登录时已锁定该帐户。

540

用户已成功登录到网络。

541

主模式 Internet 密钥交换 (IKE) 验证已在本地计算机和列出的对等客户端身份之间完成(建立安全联系),或者快速模式已建立一个数据信道。

542

已终止数据信道。

543

主模式已终止。

注意

在安全关联过期(默认为 8 个小时)、策略更改或对等客户端终止时可能出现此错误。

544

主模式身份验证失败是由于对等客户端没有提供有效证书,或者是没有经过验证的签名。

545

主模式身份验证失败是由于 Kerberos 失败或密码无效。

546

由于对等客户端发送无效的建议,因此未能建立 IKE 安全关联。接收到的数据包含有无效数据。

547

IKE 握手期间出现故障。

548

登录失败。受信任域中的安全 ID (SID) 与客户端的帐户域 SID 不匹配。

549

登录失败。在林中进行身份验证期间,所有与不受信任的命名空间相对应的 SID 都被筛选掉。

550

指示可能发生的拒绝服务攻击的通知消息。

551

用户启动注销过程。

552

当用户已经以不同用户身份登录时,可使用显式凭据成功登录到计算机。

682

用户已经重新连接到一个断开的终端服务器会话。

683

用户在没有注销的情况下与某个终端服务器会话断开连接。

注意

当用户通过网络连接到终端服务器会话时,将产生该事件。该事件出现在终端服务器上。

记录 528 事件时,同时在事件日志中列出登录类型。下表描述了每种登录类型。

登录类型 登录标题 描述

2

交互

用户已登录到该计算机。

3

网络

用户或计算机从网络登录到该计算机。

4

批处理

批服务器使用批登录类型,对于这种登录类型,服务器代表用户执行登录过程,而无需用户直接参与。

5

服务

通过服务控制管理器启动服务。

7

解锁

该工作站已解锁。

8

网络明文

用户从网络登录到该计算机。用户密码以解哈希运算形式传递到身份验证包中。在通过网络发送包之前,内置的身份验证功能对所有哈希凭据进行打包。这些凭据不以纯文本(也叫明文)方式在网络中传输。

9

新凭据

呼叫方克隆当前令牌并指定出站连接的新凭据。新登录会话具有相同的本地标识,但对其他网络连接使用不同的凭据。

10

远程交互式登录

用户使用终端服务或远程桌面远程登录该计算机。

11

缓存交互式登录

用户使用存储在本地计算机上的网络凭据登录该计算机。无法连接域控制器验证凭据。

有关安全事件的详细信息,请参阅 Microsoft Windows 资源工具包网站上的安全事件

审核安全事件最佳操作

最佳操作

在执行审核策略之前创建一个审核计划。

确定通过收集审核事件想要获得的信息类型:

如果想要进行入侵检测(跟踪用户要对未授权区域获取访问权限的尝试),可以收集失败审核。但是启用失败审核可能会威胁到您的组织。如果用户尝试访问一个未被授权的资源,则他们将创建很多的失败审核以至于安全日志被填满,并且计算机将无法再收集审核。如果您启用了“审核:如果无法记录安全审核则立即关闭系统”策略设置,用户则可以通过您的审核策略启动拒绝服务攻击。

如果想要进行甄别(使用审核记录确定组织内到底发生了什么事情),则可以收集成功审核和失败审核。

考虑可以用于收集和查看审核日志的资源。审核事件占用您计算机的空间,并且占用您的时间以及您组织中其他人的时间。不要审核您不感兴趣的事件。

将组织中的安全日志收集并存档。

如果发生入侵事件,请隔离并保存安全日志项。在调查入侵时这些项非常有用。

一个审核记录可以包含有关更改您的计算机或网络中其他的计算机的信息。如果入侵者获得管理员的权限或者管理员滥用权限,则他们可以清除安全日志,使您没有其操作的任何记录。如果您使用工具定期地收集并保存组织中的安全日志项,则即使入侵者或管理员清除了本地安全日志,您仍然很有可能跟踪入侵者或管理员的操作。“Microsoft 操作管理器”就是这样的一个工具。有关可用的最新工具,请参阅 Microsoft 网站 if(typeof(IsPrinterFriendly) != "undefined") { var l = "http://go.microsoft.com/fwlink/?LinkId=8179"; var nl; var c = l.charAt(0); var o = document.getElementById("EAB"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 上的“Search Microsoft.com”。

审核系统事件类别中的成功和失败事件。

通过审核系统事件类别中的成功和失败事件,您可以注意到可能表示入侵者正在尝试获得您的计算机或网络访问权的不一般的活动。

当该设置启用时生成的审核数量会相对较少,而且从事件中获得的信息的质量相对较高。

有关系统事件类别的信息,请参阅审核系统事件 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/a8297bc2-d53a-4a2f-94c5-8e412ae4e3862052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EQB"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关如何在系统事件类别中启用审核的信息,请参阅定义或修改事件类别的审核策略设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d9fea7ea-61e5-43b1-98cd-b02a09f101562052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EXB"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

审核域控制器上的策略更改事件类别中的成功事件。

如果策略更改事件类别中记录了事件,则说明有人已经更改了本地安全机构 (LSA) 安全策略配置。

如果使用组策略编辑审核策略设置,则没有必要审核成员服务器上策略更改事件类别中的事件。

如果您决定审核策略更改事件类别中的失败事件,则可以查阅是否未授权用户或攻击者正在尝试更改策略设置(包括安全策略设置)。尽管这对于检测入侵有所帮助,但是要求增加的资源以及拒绝服务攻击的可能性往往超过其带来的好处。

有关策略更改事件类别的信息,请参阅审核策略更改 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/962f5863-15df-4271-9ae0-4b0412e297492052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EJC"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关如何在策略更改事件类别中启用审核的信息,请参阅定义或修改事件类别的审核策略设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d9fea7ea-61e5-43b1-98cd-b02a09f101562052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EQC"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

审核帐户管理事件类别中的成功事件。

通过审核帐户管理事件类别中的成功事件,可以验证对于帐户属性和组属性进行的更改。

如果您决定审核帐户管理事件类别中的失败事件,您可以查阅是否未授权用户或攻击者正试图更改帐户属性或组属性。尽管这对于检测入侵有所帮助,但是要求增加的资源以及拒绝服务攻击的可能性往往超过其带来的好处。

有关帐户管理事件类别的信息,请参阅审核帐户管理 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/42c66475-3346-428f-8faf-47a6611655ee2052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EAD"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关如何在帐户管理事件类别中启用审核的信息,请参阅定义或修改事件类别的审核策略设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d9fea7ea-61e5-43b1-98cd-b02a09f101562052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EHD"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

审核登录事件类别中的成功事件。

通过审核登录事件类别中的成功事件,您可以记录每个用户何时登录了计算机或者何时从计算机注销。如果未授权者盗取了用户的密码并登录到计算机,则您可以确定发生违反安全的事件的时间。

如果您决定审核登录事件类别中的失败事件,则您可以查阅未授权用户或攻击者是否正在试图登录到计算机上。尽管这对于检测入侵有所帮助,但是随着对登录事件类别中的失败事件的审核,拒绝服务攻击的可能性也将增加。如果在这些事件类别中启用了失败审核,来自组织外部的用户可以通过使用错误的用户名和密码连续尝试登录到您的网络,以填满安全日志或导致事件被覆盖。如果您还启用了“审核:如果无法记录安全审核则立即关闭系统”策略设置,则在这些类别中记录失败事件的后果可能更严重 -- 如果安全日志被填满,用户可能会导致拒绝服务。

有关如何在登录事件类别中启用审核的信息,请参阅定义或修改事件类别的审核策略设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d9fea7ea-61e5-43b1-98cd-b02a09f101562052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EXD"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

审核域控制器上的帐户登录事件类别中的成功事件。

通过审核帐户登录事件类别中的成功事件,您可以看到用户何时登录了域,或者何时从域中注销。

审核成员服务器上帐户登录事件类别中的事件是不必要的。

如果您决定审核帐户登录事件类别中失败事件,则您可以查阅未授权用户或攻击者是否正在试图登录到您的网络上。尽管这对于检测入侵有所帮助,但是随着对帐户登录事件类别中的失败事件的审核,拒绝服务攻击的可能性也将增加。如果在这些事件类别中启用了失败审核,来自组织外部的用户可以通过使用错误的用户名和密码连续尝试登录到您的网络,以填满安全日志或导致事件被覆盖。如果您还启用了“审核:如果无法记录安全审核则立即关闭系统”策略设置,则在这些类别中记录失败事件的后果可能更严重 -- 如果安全日志被填满,用户可能会导致拒绝服务。

有关帐户登录事件类别的信息,请参阅审核帐户登录事件 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d8fc798c-1e77-4043-b59c-971b4961d85a2052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EJE"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关如何在帐户登录事件类别中启用审核的信息,请参阅定义或修改事件类别的审核策略设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d9fea7ea-61e5-43b1-98cd-b02a09f101562052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EQE"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

建立对象的审核时请具体一些。

要审核对象访问,您必须启用“审核对象访问”策略设置,然后编辑与该对象相关联的系统访问控制列表 (SACL)。详细信息,请参阅清单:设置对象访问权限审核 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/e035f443-9c94-48d1-8dda-3bd243ca5f1d2052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("E4E"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

要获得最佳的系统性能,请将对象的 SACL 中的项的数量降到最少。具有 1000 个用户的 SACL 的一个项目降低系统性能的程度比 1000 个独立项目降低系统性能的程度要小。

要降低所生成事件的大小并最大化每个事件的功效,请只审核您感兴趣的操作。例如,如果您对用户读文件感兴趣,请不要审核“完全控制”。

有关对象访问事件类别的信息,请参阅审核对象访问 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/50fdb7bc-7dae-4dcd-8591-382aeff2ea792052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EIF"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关基于操作的审核的信息,请参阅对文件或文件夹的基于操作的审核 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/b8664794-32e5-4f66-b3be-155f3f7379de2052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EPF"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关如何在对象访问事件类别中启用审核的信息,请参阅定义或修改事件类别的审核策略设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/d9fea7ea-61e5-43b1-98cd-b02a09f101562052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EWF"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

为安全日志设置相应的大小。

适当地配置安全日志的大小十分重要,这要基于您的审核策略设置生成的事件的数量。

有关管理事件日志的信息,请参阅事件查看器 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/ff176dba-52f7-47c2-a5dd-97f0d374593a2052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("EEG"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

有关事件日志设置的信息,请参阅事件日志的设置 if(typeof(IsPrinterFriendly) != "undefined") { var l = "/WindowsServer/zh-CHS/Library/bb9fa858-a5bb-4769-93f3-65f2fbc04e3c2052.mspx"; var nl; var c = l.charAt(0); var o = document.getElementById("ELG"); switch (c){ case "/": nl=(" [http://" + document.domain + l + "]"); break case "#": nl=(""); break default: nl=" [" + l + "]" } if(o != null) o.innerHTML = nl; } 。

常见库或开源软件的编译方法

如无特殊说明,默认为在Windows Vista + Microsoft Visual Studio 2005环境编译

1 Openssl编译方法

  1. www.openssl.org下载最新源码
  2. www.activestate.com下载并安装ActivePerl
  3. 进入Visual Studio 2005命令行
  4. cd /d [openssl解压目录]
  5. perl Configure VC-WIN32
  6. ms\do_ms.bat
  7. nmake -f ms\ntdll.mak
  8. 如无意外,在[openssl解压目录]\out32dll目录下将生成DLL和对应的LIB文件

2 curl

2.1 VC编译

  1. 到curl.haxx.se下载最新版本的curl源码包
  2. 将打开[curl解压目录]\lib目录下的所有文件名为curllib.*改成libcurl.*
  3. 使用UE替换[curl解压目录]\lib目录下所有文件中的字符串curllib为libcurl
  4. 打开libcurl工程文件
  5. 加入USE_SSLEAY USE_OPENSSL CURL_DISABLE_LDAP HAVE_ZLIB_H HAVE_LIBZ预定义
  6. 为了后期直接通过替换DLL文件升级,将curllib改成dll编译方式
  7. 定义openssl头文件目录和库文件目录
  8. 定义zlib头文件目录和库文件目录
  9. 加入附加库ws2_32.lib ssleay32.lib libeay32.lib winmm.lib zlib1.lib
  10. 编译。如果你人口不至于很差的话,应该会生成dll和lib库文件。
  11. 进入Visual Studio 2005命令行
  12. cd /d [curl解压目录]\src
  13. nmake -f Makefile.vc8
  14. 恭喜,这里应该就生成了curl.exe文件

2.2 BC编译

  1. 到[openssl解压目录]\out32dll目录下执行:
    implib -a libeay32_bcb.lib libeay32.dll
    implib -a ssleay32_bcb.lib ssleay32.dll
    或者
    coff2omf -lib:ms ssleay32.lib ssleay32_bcb.lib
    coff2omf -lib:ms libeay32.lib libeay32_bcb.lib
  2. cd /d [curl解压目录]\lib
  3. make -f Makefile.b32

3 Wireshark

  1. www.wireshark.org上下载最新版本
  2. 安装cygwin,注意一定要安装Devel下面的flex,bison; 还要安装Perl, Archive下面的upzip以及Web下面的wget
  3. 找到config.nmake
    将WIRESHARK_LIBS=c:\wireshark-libs-1.0改成你存放lib的目录
    将CYGWIN_PATH=c:\cygwin\bin改成你的目录
    将MSVC_VARIANT改成你当前使用的版本
  4. 下载wireshark需要的库文件
    nmake -f Makefile.nmake setup
  5. nmake -f Makefile.nmake all
  6. 提示ascend-scanner.c和k12text.c和scanner.c中ascendwrap和K12Text_wrap宏定义参数不对,直接使用UE替换wireshark源代码目录下的所有
    wrap(n) 1为
    wrap()
  7. scanner.c有符号和无符号不匹配,使用UE替换wireshark源代码目录下的所有
    (yy_n_chars), (size_t) num_to_read );为
    (yy_n_chars),  num_to_read );
  8. lemonflex-tail.inc提示47行什么const相关的错误,直接将TEXT_FUNC (const char *text)去掉const,改成:
    TEXT_FUNC (char *text)
  9. packet-e212.c和packet-h264.c提示编码问题
    使用UE保存为UTF8格式即可

4 SQLite

  1. http://www.sqlite.org/download.html下载最新版本,注意是sqlite-source-*_*_*.zip这样的文件名,不是整个源代码包
  2. 解压
  3. 新建工程文件,添加除了tcpsqlite.c之外的所有C文件
  4. 预定义中加入NO_TCL
  5. 加入sqlite3.def模块定义文件
  6. 编译

Linux常用命令及配置

1. Shell常用快捷键

2. Vi常用键

按键 功能说明  
a 在光标后开始插入数据  
A 在本行后开始插入数据  
i 在光标前开始插入数据  
I 在本行起始处开始插入数据  
o 在本行后插入一行并从插入的行开始编辑数据  
O 在本行前插入一行并从插入的行开始编辑数据  
x 删除光标后一个字符  
X 删除光标前一个字符  
dd 删除当前光标所在的行  
yy 复制当前光标所在的行  
p 粘贴  
cc 清空整行内容重新编辑,相当于先输入dd,再输入i  
u 撤销操作  
U 撤销本行所有操作  
0 移至行首,相当于HOME键  
[[ 光标移至上一个函数段,在编辑代码时特别有用  
]] 光标移至下一个函数段  
G 光标移至文档末尾  
{ 光标移至段首  
} 光标移至段尾  
CTRL+f 向下翻页  
CTRL+b 向前翻页  
CTRL+e  向下卷一行  
CTRL+y 向上卷一行  
CTRL+d 向下卷半页  
CTRL+u 向上卷半页  
CTRL+g 查看当前光标位置  
     

 

3. 网络配置常用命令

路由交换设备操作指南

1. 配置VLAN

2. 配置接口IP地址