第一篇:防火墙的数据包拦截方式小结
防火墙的数据包拦截方式小结
网络防火墙都是基于数据包的拦截技术之上的。在 Windows 下,数据包的拦截方式有很多种,其原理和实现方式也千差万别。总的来说,可分为“用户级”和“内核级”数据包拦截两大类。
用户级下的数据包拦截方式有:
* Winsock Layered Service Provider(LSP)。
* Win2K 包过滤接口(Win2K Packet Filtering Interface)。* 替换 Winsock 动态链接库(Winsock Replacement DLL)。
内核级下的数据包拦截方式有:
* TDI过滤驱动程序(TDI-Filter Driver)。
* NDIS中间层驱动程序(NDIS Intermediate Driver)。* Win2K Filter-Hook Driver。* Win2K Firewall-Hook Driver。* NDIS-Hook Driver。
在这么多种方式面前,我们该如何决定采用哪一种作为自己项目的实现技术?这需要对每一种 方式都有一个大致的了解,并清楚它们各自的优缺点。技术方案的盲目选用往往会带来一些技术 风险。以自己为例,我需要在截包的同时得到当前进程文件名,也就是说,需向用户报告当前是 哪个应用程序要访问网络。在选用 Win2K Filter-Hook Driver 这一方案之后(很多小型开源项
目都采用这一方案),便开始编码。但之后发现 Win2K Filter-Hook Driver 的截包上下文处于内
核进程中,即 IRQL >= DISPATCH_LEVEL,根本无法知道当前应用程序的名字。相比之下,TDI-Filter Driver 和 NDIS-Hook Driver 则可以得知这些信息。其中 TDI-Filter Driver 比 NDIS-Hook Driver 更能准确地获知当前应用程序文件名,后者的接收数据包和少数发送数据
包的场景仍然处于内核进程中。
下面列出了各种截包方式的特点:
* Winsock Layered Service Provider(LSP)该方式也称为 SPI(Service Provider Interface)截包技术。SPI是由 Winsock2 提供的一个
接口,它需要用户机上安装有 Winsock 2.0。Winsock2 SPI 工作在 API 之下的 Driver 之上,可以截获所有基于 Socket 的网络数据包。
优点:
* 以DLL形式存在,编程方便,调试简单。* 数据封包比较完整,未做切片,便于做内容过滤。
缺点: * 拦截不够严密,对于不用 Socket 的网络通讯则无法拦截(如 ICMP),木马病毒很容易绕过。
* Win2K Packet Filtering Interface
这是 Win2K 中一组 API 提供的功能(PfCreateInterface, PfAddFiltersToInterface,...)。
优点:
* 接口简单,实现起来没什么难度。
缺点:
* 功能过于简单,只能提供IP和端口的过滤,可能无法满足防火墙的复杂需求。* 处于 API 层,木马病毒容易绕过。* 只能在 Win2K 以上(含)系统中使用。
* Winsock Replacement DLL 这种方法通过替换系统 Winsock 库的部分导出函数,实现数据报的监听和拦截。
缺点:
* 由于工作在 Winsock 层,所以木马病毒容易绕过。
* TDI-Filter Driver
TDI 的全称是 Transport Driver Interface。传输层过滤驱动程序通过创建一个或多个设备对象
直接挂接到一个现有的驱动程序之上。当有应用程序或其它驱动程序调用这个设备对象时,会首
先映射到过滤驱动程序上,然后由过滤驱动程序再传递给原来的设备对象。
优点:
* 能获取到当前进程的详细信息,这对开发防火墙尤其有用。
缺点:
* 该驱动位于 tcpip.sys 之上,所以没有机会得到那些由 tcpip.sys 直接处理的包,比如ICMP。
* TDI驱动需要重启系统方能生效。
* NDIS Intermediate Driver
也称之为 IM Driver。它位于协议层驱动和小端口驱动之间,它主要是在网络层和链路层之间对
所有的数据包进行检查,因而具有强大的过滤功能。它能截获所有的数据包。
可参考DDK中附带的例子 Passthru。
优点:
* 功能非常强大,应用面广泛,不仅仅是防火墙,还可以用来实现VPN,NAT 和 VLan 等。
缺点:
* 编程复杂,难度较大。
* 中间层驱动的概念是在 WinNT SP4 之后才有的,因此 Win9X 无法使用。* 不容易安装,自动化安装太困难。
* Win2K Filter-Hook Driver 这是从 Win2K 开始提供的一种机制,该机制主要利用 ipfiltdrv.sys 所提供的功能来拦截网络
数据包。Filter-Hook Driver 的结构非常简单,易于实现。但是正因为其结构过于简单,并且
依赖于 ipfiltdrv.sys,微软并不推荐使用。
可参考 CodeProject 上的例子:http://www.xiexiebang.com/KB/IP/drvfltip.aspx
优点:
* 结构简单,易于实现。
* 能截获所有的IP包(包括ICMP包)。
缺点:
* 工作于内核进程中,无法取得当前应用程序进程的信息。
* 虽能截获所有IP包,但无法取得数据包的以太帧(Ethernet Frame)。* 只能在 Win2K 以上(含)系统中使用。
* Win2K Firewall-Hook Driver 这是一种和 Win2k Filter-Hook Driver 差不多的机制,所不同的是,Firewall-Hook Driver 能在 IP Driver 上挂接多个回调函数,所以和前者相比,它引起冲突的可能性更小一些。
可参考 CodeProject 上的例子:http://www.xiexiebang.com/KB/IP/FwHookDrv.aspx
这种方式的优缺点和 Win2K Filter-Hook Driver 基本相同。
* NDIS-Hook Driver
这是一种要重点讲述的截包方式。它是目前大多数网络防火墙所使用的方法。这种方式的做法
是安装钩子到 ndis.sys 中,替换其中的某些关键函数,从而达到截包的目的。在下一节中我
们将详细地介绍它的实现方法。
优点:
* 安装简单,可即时安装和卸载驱动,无需重启系统。
* 能截获所有的IP包,同时能取得数据包的以太帧(Ethernet Frame)。* 安全性高,木马病毒不容易穿透。
* 在大多数情况下,能获取到当前应用程序的进程信息。* 能在 Win98 以上(含)系统中使用。
缺点:
* 接收数据包、或偶尔发送数据包时,驱动工作在内核进程中,无法获得应用程序进程信息。
◎ NDIS-Hook 技术
微软和 3COM 公司在1989年制定了一套开发 Windows 下网络驱动程序的标准,称为 NDIS。
NDIS 的全称是 Network Driver Interface Specification。NDIS为网络驱动的开发提供了一套
标准的接口,使得网络驱动程序的跨平台性更好。
NDIS提供以下几个层次的接口:
1.NDIS 小端口驱动(NDIS Miniport Driver)。这也就是我们常说的网卡驱动。
2.NDIS 协议驱动(NDIS Protocol Driver)。用来实现某个具体的协议栈,如 TCP/IP 协议栈,并向上层导出 TDI 接口。3.NDIS 中间层驱动(NDIS Intermediate Driver)。
这是位于小端口驱动和协议驱动之间的驱动。
NDIS为了给出上述三种接口,提供了一个系统的、完整的 Wrapper。这个 Wrapper 即 ndis.sys。
上面提到的 Miniport Driver、Protocol Driver、Intermediate Driver 均属于插入到这个 Wrapper 中的“模块”,它们调用 Wrapper 提供的函数,同时也向 Wrapper 注册回调函数。
在简单了解了NDIS的机制之后,不难得知,网络防火墙只需要将自己的函数挂钩(Hook)到 ndis.sys
中即可截获网络数据包。NDIS-Hook 技术有两种实现方案:
1.修改 ndis.sys 的 Export Table。
在 Win32 下,可执行文件(EXE/DLL/SYS)都遵从PE格式。所有提供接口的驱动都有 Export Table,因此只要修改 ndis.sys 的 Export Table,就可实现对关键函数的挂接。在实现步骤中,首先
需要得到 ndis.sys 的内存基址,再根据PE格式得到DOS头部结构(IMAGE_DOS_HEADER),进一步得
到NT头部结构(IMAGE_NT_HEADER),最后从头部结构中查得 Export Table 的地址。
由于协议驱动程序(NDIS Protocol Driver)在系统启动时会调用 NdisRegisterProtocol()来向
系统注册协议,因此这种方法关键在于修改 ndis.sys 所提供的 NdisRegisterProtocol、NdisDeRegisterProtocol、NdisOpenAdapter、NdisCloseAdapter、NdisSend 这几个函数的地址。
对于处于系统核心的 ndis.sys 而言,要修改它的内存区域,只有驱动程序才能做到,所以我们
必须编写驱动程序来达到这个目的。
该方案的缺点是加载或卸载驱动后无法立即生效,必须重启系统。且挂钩方法较为复杂。早期凡
使用 NDIS-Hook 的防火墙都采用这一方法,包括著名的费尔防火墙的早期版本(v2.1)。
直到 2004 年,www.xiexiebang.com 上一名黑客公布了一种全新的 NDIS-Hook 技术(即下文即将提
到的第2种方法),诸多防火墙产品才都悄悄对自己的核心技术进行了升级。由于新的挂钩技术更
好,故本文不打算详述修改 Export Table 这一方法的具体细节。
2.向系统注册假协议(Bogus Protocol)。NDIS提供了一个API: NdisRegisterProtocol(),这个API的职责是向系统注册一个协议(如TCPIP),并将该协议作为一个链表节点插入到“协议链表”的头部,最后返回该链表头节点(即新节点)的
地址。正常情况下,只有NDIS协议驱动程序(NDIS Protocol Driver)才会调用这个API。
既然如此,如果我们也调用 NdisRegisterProtocol()向系统注册一个新的协议,我们也就能轻
易地得到“协议链表”的首地址,通过走访这个链表,就能修改其中的某些关键信息,比如关键
函数的地址。修改完毕后,再调用 NdisDeRegisterProtocol()注销掉新协议。这看似一切都没
发生,但事实上目的已经达到了。这个新协议我们称之为假协议(Bogus Protocol)。
通过这种方法,我们可以不用重启系统就能轻松挂接截包函数。当今大多数网络防火墙都采用了
这一方法。近来网上又有人提出了获取协议链表首地址的新的怪异途径,比如获取 tcpip.sys 中全局变量 _ARPHandle 值的方法。不管怎样,相比之下,注册假协议仍不失为一种经典且简单的方法。
本文将详细叙述第2种方案的内部原理和实现细节,即通过注册假协议获取协议链表首地址,遍历
链表并修改其中的函数地址,挂钩自己的函数,从而实现网络截包。在这么做之前,需要先对NDIS
内部维护的几个结构有清楚的认识。另外,由于历史原因,NDIS存在诸多并不完全向下兼容的版本,不同的版本中关键数据域的偏移地址也不尽相同。微软并没有以文档形式提供这些变化的列表。本
文稍后给出这些变化。
* NDIS_PROTOCOL_BLOCK 和 NDIS_OPEN_BLOCK
在NDIS中,所有已注册的协议是通过一个单向的协议链表来维护的。这个单向链表保存了所有已注册 的协议,每个协议对应一个节点。链表节点由 NDIS_PROTOCOL_BLOCK 结构来描述,在这个结构中保存
了注册协议驱动时所指定的各种信息,如支持协议即插即用的回调函数地址等。同时,每个协议驱动
还对应一个 NDIS_OPEN_BLOCK 节点结构的单向链表来维护其所绑定的网卡信息,协议驱动发送和接收
数据包的回调函数地址就保存在这个结构中,是我们要重点修改的对象。
协议与网卡绑定的示意图如下: ┌───┐
│ Head │
└─┬─┘
↓
┌──────────────┐ ┌───────────┐
│ TCPIP Protocol Block ├──→│ RTL8168 Open Block │
└──────┬───────┘ └─────┬─────┘
↓ ↓
┌──────────────┐ ┌───────────┐
│ TCPIP_WANARP Protocol Block│ │ Wireless Open Block │
└──────┬───────┘ └─────┬─────┘
↓ ↓ ┌───┐ ┌───┐
│ NULL │ │ NULL │
└───┘ └───┘ * 得到 NDIS_PROTOCOL_BLOCK 链表的首地址
上文已提到,通过向系统注册假协议,我们即可得到协议链表的首地址。从DDK中可查到 NdisRegisterProtocol()的原型:
EXPORT VOID NdisRegisterProtocol(OUT PNDIS_STATUS Status, OUT PNDIS_HANDLE NdisProtocolHandle, IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, IN UINT CharacteristicsLength);
可以看出,我们在调用它时需要传入一个结构 NDIS_PROTOCOL_CHARACTERISTICS,这个结构是我们
在注册协议时必须填写的一张表格,这个表格描述了协议的相关信息。不过既然我们注册的是一个
假协议,所以可以尽量简单地填写它。
NDIS_STATUS
DummyNdisProtocolReceive(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookAheadBufferSize, IN UINT PacketSize){ return NDIS_STATUS_NOT_ACCEPTED;}
NDIS_HANDLE
RegisterBogusNdisProtocol(void){ NTSTATUS Status = STATUS_SUCCESS;NDIS_HANDLE hBogusProtocol = NULL;NDIS_PROTOCOL_CHARACTERISTICS BogusProtocol;NDIS_STRING ProtocolName;NdisZeroMemory(&BogusProtocol, sizeof(NDIS_PROTOCOL_CHARACTERISTICS));BogusProtocol.MajorNdisVersion = 0x04;BogusProtocol.MinorNdisVersion = 0x0;
NdisInitUnicodeString(&ProtocolName, L“BogusProtocol”);BogusProtocol.Name = ProtocolName;BogusProtocol.ReceiveHandler = DummyNdisProtocolReceive;NdisRegisterProtocol(&Status, &hBogusProtocol, &BogusProtocol, sizeof(NDIS_PROTOCOL_CHARACTERISTICS));
if(Status == STATUS_SUCCESS)return hBogusProtocol;else return NULL;}
函数 RegisterBogusNDISProtocol()的返回值即是我们想要的协议链表首地址。不过须注意的是,在函数挂钩完成后,应调用 NdisDeregisterProtocol()将假协议注销。另外,在遍历协议链表
进行函数挂钩时,应从首节点的下一个节点开始,因为首节点是我们的假协议节点。
* 修改原有函数地址值实现函数挂钩
上文已提到了和NDIS相关的三个结构: NDIS_PROTOCOL_BLOCK, NDIS_OPEN_BLOCK, NDIS_PROTOCOL_CHARACTERISTICS。
那么我们要替换的函数在哪儿呢?答案是在 NDIS_OPEN_BLOCK 和 NDIS_PROTOCOL_CHARACTERISTICS
这两个结构中,而且重点是前者,因为前者是协议驱动和网卡绑定的纽带。现在的主流网卡都只 调用 NDIS_OPEN_BLOCK 中的收发函数进行发送和接收数据包。但据试验,虚拟机 VMware 有时会
调用 NDIS_PROTOCOL_CHARACTERISTICS 中的函数进行数据包收发。所以为了严谨,我们应该对两
个结构中的函数进行替换。关于这两个结构的定义,读者可以自行查阅DDK文档和头文件。
下面给出示意性代码。简单起见,下列代码均假设当前NDIS的版本为5.0。
BOOLEAN InstallHook(void){ NDIS_STATUS nStatus;NDIS_HANDLE hBogusProtocol = NULL;BYTE *pProtocolChain;
// Get the address of the first NDIS_PROTOCOL_BLOCK node.hBogusProtocol = RegisterBogusNDISProtocol();if(hBogusProtocol == NULL)return FALSE;pProtocolChain =(BYTE*)hBogusProtocol;while(TRUE){ // Get the address of the next node.DWORD dwOffset = 0x10;// for NDIS 5.0 pProtocolChain =((BYTE **)(pProtocolChain + dwOffset))[0];if(!pProtocolChain)break;
HookNdisProtocolBlock(pProtocolChain);}
NdisDeregisterProtocol(&nStatus, hBogusProtocol);return TRUE;} void
HookNdisProtocolBlock(IN BYTE *pProtocolBlock){ PNDIS_PROTOCOL_CHARACTERISTICS pProtoChar;PNDIS_OPEN_BLOCK pOpenBlock;
pProtoChar =(PNDIS_PROTOCOL_CHARACTERISTICS)(pProtocolBlock + 0x14);HookNdisProc(MyReceive,(PVOID *)&pProtoChar->ReceiveHandler);HookNdisProc(MyReceivePacket,(PVOID *)&pProtoChar->ReceivePacketHandler);HookNdisProc(MyBindAdapter,(PVOID *)&pProtoChar->BindAdapterHandler);
pOpenBlock =((PNDIS_OPEN_BLOCK *)pProtocolBlock)[0];while(pOpenBlock){ HookNdisProc(MySend,(PVOID *)&pOpenBlock->SendHandler);HookNdisProc(MyReceive,(PVOID *)&pOpenBlock->ReceiveHandler);HookNdisProc(MyReceivePacket,(PVOID *)&pOpenBlock->ReceivePacketHandler);HookNdisProc(MySendPackets,(PVOID *)&pOpenBlock->SendPacketsHandler);
pOpenBlock = pOpenBlock->ProtocolNextOpen;} } void HookNdisProc(IN PVOID pMyProc, IN PVOID *ppOrgProc){ // TODO: Save the address of the original proc.*ppOrgProc = pMyProc;}
InstallHook()首先得到协议链表的首地址,接着遍历链表,针对系统中的每个(第一个除外)NDIS_PROTOCOL_BLOCK 调用 HookNdisProtocolBlock()函数。HookNdisProtocolBlock()对 NDIS_PROTOCOL_BLOCK 中 NDIS_PROTOCOL_CHARACTERISTICS 和
NDIS_OPEN_BLOCK 链表的每个节点进行函数挂接。
HookNdisProc()用于替换函数地址。给出的代码中它只是简单地替换函数地址,在实际应用中,它还应当保存原始函数的地址值,以供新的函数调用。
* 关键数据域在不同NDIS版本中的差异
由于 NDIS-Hook 并非受微软官方支持的技术,所以相关文档非常缺乏。不仅如此,操作系统的 每次升级,都会同时升级NDIS,而NDIS中的某些数据结构并没有保持向下兼容。最需要注意的
是 NDIS_PROTOCOL_BLOCK。
在 Win9x/Me/NT 的DDK中,NDIS_PROTOCOL_BLOCK 都有明确的定义,但在 Win2K/XP 的DDK中,并没有该结构的详细定义,也就是说该结构在 Win2K 以后(含)的系统中是非公开的。因此开发
人员只能利用各种调试工具来发掘该结构的详细定义。也正是因为如此,NDIS-Hook 方法对平台 的依赖性比较大,需要在程序中判断不同的操作系统版本而使用不同的结构定义。
NDIS_PROTOCOL_BLOCK 的定义可大致认为是这个样子:
typedef struct _NDIS_PROTOCOL_BLOCK { PNDIS_OPEN_BLOCK OpenQueue;REFERENCE Ref;UINT Length;NDIS_PROTOCOL_CHARACTERISTICS ProtocolChars;struct _NDIS_PROTOCOL_BLOCK* NextProtocol;ULONG MaxPatternSize;//...} NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
其中 OpenQueue 为 PNDIS_OPEN_BLOCK 链表的首节点地址,NextProtocol 指向下一个
NDIS_PROTOCOL_BLOCK 节点。
在不同的NDIS版本中,该结构中的某些域的偏移地址是不同的,现列于下:
┌───────┬───────────┬───────────┐
│ NDIS Version │ ProtocolChars offset │ NextProtocol offset │
├───────┼───────────┼───────────┤
│ 3.XX │ 0x14 │ 0x04 │
│ 4.XX │ 0x14 │ 0x60 │
│ 4.01 │ 0x14 │ 0x8C │
│ 5.XX │ 0x14 │ 0x10 │
└───────┴───────────┴───────────┘ * 如何在驱动中得到当前NDIS版本? 有两种方法可得到当前NDIS版本。一种是先取得当前操作系统的版本信息,在根据操作系统 的版本得到NDIS的版本。操作系统版本和NDIS版本有一个映射关系,读者可在DDK帮助中查到。
┌───────┬───────┐
│ OS Version │ NDIS Version │
├───────┼───────┤
│ Win95 │ 3.1 │
│ Win95 OSR2 │ 4.0 │
│ Win98 │ 4.1 │
│ Win98 SE │ 5.0 │
│ WinMe │ 5.0 │
│ WinNT 3.5 │ 3.0 │
│ WinNT 4.0 │ 4.0 │
│ WinNT 4.0 SP3│ 4.1 │
│ Win2K │ 5.0 │
│ WinXP │ 5.1 │
│ WinVista │ 6.0 │
└───────┴───────┘
还有一种方法,通过调用 NdisReadConfiguration()直接获取NDIS版本。代码如下:
BOOLEAN GetNdisVersion(OUT DWORD *pMajorVersion, OUT DWORD *pMinorVersion){ NDIS_STATUS nStatus;NDIS_STRING VersionStr = NDIS_STRING_CONST(“NdisVersion”);PNDIS_CONFIGURATION_PARAMETER ReturnedValue;BOOLEAN bResult;NdisReadConfiguration(&nStatus, &ReturnedValue, NULL, &VersionStr, NdisParameterInteger);
bResult =((nStatus == NDIS_STATUS_SUCCESS)? TRUE : FALSE);if(bResult){ //
// The returned value has the NDIS version of the form // 0xMMMMmmmm, where MMMM is major version and mmmm is minor // version so 0x00050000 is 5.0 //
DWORD dwVersion = ReturnedValue->ParameterData.IntegerData;if(pMajorVersion)*pMajorVersion = dwVersion >> 16;if(pMinorVersion)*pMinorVersion = dwVersion & 0xFFFF;}
return bResult;}
须注意的是,GetNdisVersion()必须在 PASSIVE_LEVEL 下运行。所以此函数适合于在 驱动的 DriverEntry()中调用,因为 DriverEntry()一定是处于 PASSIVE_LEVEL 的。
第二篇:基于数据包捕获与分析的个人防火墙论文
基于数据包捕获与分析的个人防火墙论文
本套设计论文描述及运行界面展示
摘 要
数据包过滤是一个用软件或硬件设备对向网络上传或从网络下载的数据流进行有选择的控制过程。数据包过滤的功能通常是在将数据包从一个网站向另一个网络传送的过程中允许或阻止它们的通过(更为常见的是在从英特网向内部网络传输数据时,或从内部网络向英特网传输)。若要完成数据包过滤,你就要设置好规则来指定哪些类型的数据包被允许通过和哪些类型的数据包将会被阻止。
基于数据包过滤的防火墙,能够很好地保护用户在与网络连接时的安全性。
我们的目标,就是通过截获数据包,并且对其进行分析,来放行或阻止网络访问,从而达到保护计算机安全的目的。
本论文主要讲述了下面几点:
一、数据包捕获及网络安全技术
二、系统的设计与实现
三、测试及其他
关键字:数据包捕获;防火墙;网络安全
Abstract Packet Filtering is the process a piece of software or device takes to selectively control the flow of data to and from a network.Packet Filters allow or block packets, usually while routing them from one network to another(most often from the Internet to an internal network, and vice-versa).To accomplish packet filtering, you set up rules that specify what types of packets are to be allowed and what types are to be blocked.The packet filtering based firewall can protect the security of computers very well.Our goal is to capture and analysis data packets ,so we can examines all packets that pass in and out of it to prevent packets from passing through ,and the computer is protected.The thesis presents these aspects:
1、Technology of Packet Filtering and Network Security
2、How to implement the system
3、Testing document and others Key Words: Packet Filtering、Firewall、network security
目 录 第一章 绪论 1 第一节 课题意义1 第二节 课题综述1
一、国内外发展情况 1
二、网络安全技术介绍 4
三、防火墙介绍 6
四、防火墙技术发展趋势8
五、防火墙产品发展趋势10 第二章 需求分析 11 第一节 需求分析11
一、功能调查11
二、初步设计12 第二节 可行性分析 12
一、技术可行性及方案选择 12 第三节 开发环境及工具 13
一、开发环境13
二、开发工具14 第三章 基础实现技术介绍 15 第一节 MFC介绍15 第二节 数据包过滤技术 15
一、数据包 15
二、数据包过滤是怎样工作的16
三、包过滤的优点 16 第四章 系统总体设计18 第一节 功能分析18 第二节 系统工作流程 19
一、系统工作流程图 18
二、原理分析20
三、系统工作过程描述 21 第五章 子模块设计 22 第一节 模块分析21
一、模块划分原则 22
二、模块划分23
三、模块接口定义 25 第二节 子模块详细设计 26
一、注册模块26
二、查询模块28
三、流量统计模块 29 第六章 出现问题及解决办法 32 第一节 出现问题32 第二节 无法解决的问题 33 第七章 测试 34 第一节 测试方案34 第二节 测试实例35 第三节 测试总结39 结束语 40 致谢 41 参考文献42
第三篇:领导方式转变小结
“用领导方式转变加快发展方式转变”解
放思想大讨论活动第一阶段小结
根据市委的统一部署和局党委的计划安排,我局认真组织开展了“用领导方式转变加快发展方式转变”解放思想大讨论活动。通过第一阶段的学习活动,使广大干部职工整体上对“用领导方式转变加快发展方式转变”的重要性、必要性和紧迫性有了新的领悟,深化了对科学发展观的认识,全水务系统想发展、议发展、谋发展的氛围日益浓厚,形成了改革创新的思想动力,为第二阶段活动的顺利开展打下了良好基础。现就第一阶段的工作开展情况简要作一小结。
一、第一阶段活动开展情况
3月5日林州市“用领导方式转变加快发展方式转变”解放思想大讨论活动动员会后,XX党委按照市委的统一部署,3月9日及时召开了XX“用领导方式转变加快发展方式转变”解放思想大讨论活动动员会,精心组织,扎实推进,在全系统内迅速掀起了新一轮解放思想热潮。回顾第一阶段的工作,主要有以下五个特点:
(一)高度重视。市动员会结束以后,局党委及时召开了会议,专题研究部署大讨论工作,细化任务,明确责任。3月9日制定了《XX“用领导方式转变加快发展方式转变”解放思想大讨论活动工作方案》。及时成立了以局党委书记
1为组长,副书记为副组长,各分管领导为成员的“大讨论活动领导小组”。并设立了办公室。提出了主要领导亲自抓,分管领导具体抓的要求,在XX系统形成了一级抓一级,一级促一级,层层抓落实的工作格局。
(二)领导带头。活动开展的是否顺利,效果是否明显,关键要看领导。在此阶段活动中,XX系统各级领导干部都能做到率先垂范,并将其贯穿于活动的各个环节,体现到工作的各个方面,使领导干部既是活动的组织者,也是活动的先行者,带头学习讨论,带头更新观念,带头转变作风,带头改进工作,切实增强了进一步解放思想的主动性和积极性,增强落实科学发展观的坚定性和自觉性,积极探索发展的新理念、新路径,在抓机遇中谋思路、破难题、谋跨越、抓发展,使思想达到新境界,观念取得新突破,工作拿出新举措,实现水利事业的新跨越。
(三)真抓实学。一是局党委统一下发了学习笔记,购买了《何平九论》,并从网上下载了一些有关省重要领导讲话的学习资料,下发给各局属单位和科室,健全了学习制度,实行了学习签到制。二是认真组织动员。为了充分提高全XX系统干部职工对大讨论活动的认识,局党委及时召开了动员大会,局党委书记、局长XX同志做了重要讲话,纪委书记XX传达了活动方案并就活动的安排进行了部署,讲解了大讨论活动的重要意义,使全体干部职工充分认识到了开展大讨
论活动的重要性和必要性,把思想统一到省委、市委的决策部署上来,增强了参加大讨论活动的自觉性,迅速在全XX系统掀起了大讨论活动的热潮。三是认真组织学习。利用每周二、五学习日统一组织,集中学习的形式,认真组织学习了省委书记卢展工在《人民日报》发表的署名文章《用领导方式转变加快发展方式转变》及有关重要讲话精神,学习了《河南日报》刊发的何平系列政论文章,学习了安阳市市委书记张广智在动员大会上的讲话精神和2月23日来林调研时的讲话精神,学习了我市市委书记XX在动员大会上的讲话精神和红旗渠精神等学习内容,通过每个专题的学习,要求领导干部职工撰写了读书笔记和心得体会、理论文章或调研报告,确保了学习效果。同时,在学习提高的基础上,我们又及时开展不同层次的学习交流会,组织领导干部交流学习体会,畅谈学习收获,通过座谈讨论、班子谈心活动等,全面加深了用领导方式转变加快发展方式转变的理解和认识。四是加强督导。为推动解放思想大讨论活动在全水务系统取得实效,局党委在加强对机关开展活动引导的同时,及时向各局属单位,下发了《中共XXX委员会关于成立XX系统“用领导方式转变加快发展方式转变”解放思想大讨论活动领导小组的通知》、《XX系统“用领导方式转变加快发展方式转变”解放思想大讨论活动工作方案》,并要求各局属单位结合本单位工作实际制定相应的活动方案、成立领导小
组,局党委重点对各单位大讨论活动的组织领导、工作部署和实际效果,进行督促检查,保证了活动在全XX系统开展的实效性。
(三)搞好宣传。为了扩大活动影响,充分调动大家的积极性,充分利用标语、板报、简报等宣传形式,大力宣传学习贯彻活动中出现的好做法、好经验。利用学习专栏,及时报道活动开展情况。解放思想大讨论活动办公室针对每个学习专题专门印发活动简报,有力指导和推动了活动的开展。
(四)联系实际。为增强对工作的指导性,实效性,全水系统在解放思想大讨论活动中,紧紧围绕我市加快建设三省交界区域中心城市提供水利支撑和保障的思路,以解放思想和转变作风为重点,着力抓好以下具体工作。一是综合运用现代管理手段和方法探索适合全市XX改革发展的管理模式;二是加大对执法人员的培训;三是完善管理规章制度;四是按照中央一号文件精神抢抓机遇,加快基层设施建设步伐;五是按照解放思想大讨论活动目标要求进一步增强全系统发展为民、团结奋进的凝聚力。
(五)效果明显。一是通过学习动员阶段的组织发动、学习和宣传,使广大干部职工增强了开展大讨论活动的自觉性,明确了大讨论活动的指导思想和重大意义,明确了大讨论活动的重要内容和方法步骤,都能够积极投身到活动中,学习了规定的学习内容,达到了统一思想、提高认识的目的,取得了明显成效。二是通过广泛的学习讨论,促使大家对八个进一步有了更深刻的理解和认识,即:一是进一步增强抢抓机遇、应对挑战的洞察力;二是进一步增强驾驭全局、统筹协调的掌握力;三是进一步增强遵循规律、实事求是的运作力;四是进一步增强从容清醒、化危为机的应对力;五是进一步增强敢想敢干、锐意进取的创新力;六是进一步增强实干为先、求实求效的执行力;七是进一步增强恪尽职守、忠诚履责的向心力;八是进一步增强发展为民、团结奋进的凝聚力。全系统解放思想大讨论活动第一阶段的系统学习任务已结束,已完成了规定的学习任务。
二、下步工作打算
(一)继续开展好学习活动。为了提高学习的质量,保证学习的效果,各局属单位和各科室要结合查摆问题,对于活动方案中没有学完的书目,进一步加强学习搞好自学,严格落实“三个必须”:必须按方案中的书目内容,通读每篇文章,划出学习重点;必须在笔记上摘录每篇文章的重点内容,领会文章要义;必须结合自身思想实际,边学习边思考,写出心得体会。局党委将对个人读书笔记和心得体会统一进行检查。
(二)要广泛征求意见。各局属单位和各科室要以座谈讨论、谈心交流、走访调研、设置征求意见箱、发放征求意见表等形式,结合自身业务,广泛征求意见和建议。
(三)要认真查找问题。在走访调研的基础上,各局属单位和各科室要对照科学发展观要求,按照活动方案的要求,结合工作职能,结合业务范围,结合自身素质,着力解决本单位领导干部在思想观念、体制机制、方式方法等方面存在的突出问题。领导干部和科室长(主任)要以身作则,带头查找问题。对查找到的问题要提出整改要求,明确整改责任。
(四)要开好民主生活会。各局属单位领导班子要开好一次高质量的民主生活会,要围绕机制、忧患、规律、大局、创新、责任、求实、为民等八个方面,深刻讨论反思在思想观念、思维方式、体制机制、工作思路、工作方法、工作作风等方面存在的与转变发展方式不相适应、不相符合的突出问题,深刻剖析原因,澄清领导班子和领导干部在领导方式上存在的模糊认识。通过开展批评和自我批评,深入剖析根源,提出整改措施。
二0一一年三月三十日
第四篇:初中历史课堂小结的主要方式
初中历史课堂小结的主要方式
一个完整的教学过程应该有课堂小结,好的课堂小结好似教学的压轴戏,精心设计出生动有趣、行之有效的小结,无疑可以为一堂课锦上添花,收到余音绕梁的奇效:它有利于教师突出教学重点,帮助学生强化记忆、巩固知识,有利于学生将知识条理化、系统化,在头脑中形成系统的知识。因此,教师应该把课堂小结作为教学的重要环节,根据教材内容和学生情况、认真挖掘教材、精心设计、选择合适的方法做好课堂小结,才能提高教学质量。
一、图表式小结
对于每一单元之后的科技文化、宗教、思想、艺术等领域的学习,采用图示或表格形式进行小结是最简洁的。它通过将课堂讲授内容进行概括整理,突出重点地进行一定的归类、比较,能帮助学生利用表格从不同角度、多方联系辨别分析,找出规律,找出异同,看清知识脉络,便于记忆。例如,在学习完初中历史八年级上册第三单元“新民主主义革命的兴起”后,我与学生一同回顾了本章从五四爱国运动和中国共产党的成立开始,到长征的胜利这一时期的知识点,在学生的回答声中和我的引导下,一同完成表格。
二、图示式小结
如果能配合相应的知识结构图解表解,效果会更好。比如在讲完九年级上第10课《英国资产阶级革命》后,用如下结构图演示了整体革命过程:导火线(苏格兰人民起义)→爆发标志(新议会召开)→阶段性胜利(处死国王查理一世)→复辟(查理二世)→光荣革命→胜利(《权利法案》)→伟大意义。通过这一图示,使学生对英国资产阶级革命有了较为直观的印象。
三、比较式小结
中外历史,要注意联系,相互比照,很利于教学,也利于学生记忆。比如讲九年级上第17课《日本明治维新》时,就可以用比较法。用“分析比较日本明治维新和中国戊戌变法的异同”作为小结,方便对比记忆。相同点可以从外部环境、改革的性质、改革的内容、改革的方式去比较;不同点可以从改革的时间、外部环境、改革的力量、改革的结果等方面去比较。
四、归纳式小结
归纳法是历史课堂教学的最常用方法,可以使错综复杂、纵横交错的知识点系统化,利于培养学生的概括能力,提高分析和判断能力,但和所有教学环节一样,这里也需要多变的方法使学生保持兴趣和思维的积极状态,有利于学生把握重难点。此法以概括本课的知识点和主要内容为主,它不是所授新课内容的简单重复,而是对知识内容上提纲挈领的归纳和情感上的升华,是对某些历史事件、历史现象进行规律性的总结。如在《鸦片战争》的教学中不妨设计一个讨论式的小结:学习了鸦片战争,了解了19世纪中叶的国内外形势,请大家讨论一下,若是没有林则徐的禁烟,鸦片战争还会爆发吗?说说你的理由。要求学生紧紧围绕本节课的内容进行分析讨论。这样不仅重新激起了已经削减了的学习兴趣,而且利于学生整体上理解鸦片战争,对鸦片战争这一事件在更深层次上的认识,使课堂教学再上一个新的台阶。
五、承上启下式小结
历史教学时必须照顾到各个历史事件和历史现象之间的连接点。教师在作小结时,既要突出本课的重点,加深学生对知识的记忆,同时,找准前后两课内容的联系点,利用既富有启发性,又能暗示新课内容的问题,使本节内容与下一课连贯起来,“欲知后事如何,请听下文分解”,激起学生对新课内容的好奇心。例如,在学习七年级上册的“秦帝国的兴亡”后,我总结道:“通过这节课的学习,我们知道公元前221年,秦统一了六国,结束了长期分裂割据的局面,建立起我国历史上第一个统一的多民族的中央集权国家。可秦朝十来年就灭亡了,秦始皇的暴政更是招来后世不尽的骂名。但是秦始皇真的无一是处吗?”以此强调了本节课的线索,又调起了学生学习下一课“秦始皇建立中央集权的措施”的兴趣。
六、讨论式小结
在课堂教学中有着十分重要的作用,它能培养学生分析问题、解决问题的能力。教师通过提出问题,让学生进行讨论后作出小结,通过创造一种紧张思考问题的良好氛围,使学生更透彻地理解教材的有关知识,巩固所学内容,同时,它能加强学生对教学活动的参与,使学生成为学习的主人。例如,在学习“夏商西周的社会与国家”后,我请学生谈谈通过今天这堂历史课的学习有哪些收获。学生1:西周的分封制,包括它的实行目的、主要内容和作用。学生2:奴隶制社会的主要社会成员有贵族、平民与奴隶,他们组成了奴隶制社会的阶级结构。学生3:西周的统治者吸取商亡的教训,注意治民之道,系统地提出了“礼、乐、刑、政”一整套治民之术,其中最突出的就是“礼”和“刑”。学生4:还知道了今天所用地名的历史渊源。在学生回答的过程中,教师可做适当的点拨,在学生回答时,教师可在黑板上做简单的记录,以突出本节课的知识点,也可以请优等生在最后做出系统归纳,提高学生对课堂教学的参与度。
七、练习巩固式小结
这也是较常用的一种方法。教师精心设计针对本节、本章教学内容的练习,学生通过练习,达到巩固知识的目的。为了能取得更好的效果,教师设计的练习要精巧,另外如果是简单的知识性回顾式的练习,应先让学习用少量时间阅读课文后完成,避免直接从课本上简单抄录。比如在讲完九年级上第五单元时,可以提问:主要资本主义国家走上资本主义道路的方式有何不同?对前两个单元进行阶段性小结。
八、补充拓展式小结
不同版本的教材,讲述侧重有所不同,由于种种原因,教材中不可能将事件从头至尾清晰地呈现,因此,根据课本内容,对材料进行适当的补充,可帮助学生对事件做更详细的了解。例如,在学习“抗日战争的胜利”后,在做课堂小结时,我为学生适时地补充了抗战取得胜利的其它原因,如国共合作、世界反法西斯战争的胜利等。同时,在教学中,将历史知识与社会重大时政和社会热点问题相结合,可培养学生运用历史知识分析处理问题的能力,并能做到关心社会、把握时代的脉搏。因此,教师应重视历史事件与现实(的结合,重视历史的史鉴作用。例如,在学习完九年级下册的“第二次世界大战”后,我做小结时,利用一战二战的性质,请同学们谈谈当今威胁世界和平安全的因素有哪些,至今未发生世界大战的原因是什么,利用战争形成的世界格局请同学们谈谈当今世界格局的特点。
总之,课堂小结可以把比较分散的知识点教学系统化。课堂小结的方法也是不一而足的,但同样不可千篇一律,以防学生在整个课堂教学中由于疲劳兴趣减免而影响效果。课堂小结犹如一场精彩演出的压轴戏,有余音绕梁的功效。教师应根据授课内容、学生的具体情况,选择合适的课堂小结。
第五篇:个人做站经验分享 SEO方式小结
个人做站经验分享 SEO方式小结
做优化很长时间了,在这里我要和大家分享一下我的工作心得,以便能帮助更多的人在工作的道理的越走越顺。也希望大家能给我提出宝贵的意见来。
1、网页标签优化,网页标签优化主要包括标题标签,关键词标签,描述标签等。标题标签优化对搜索引擎非常重要,描述标签千万不要夸大,要保持和页面内容相符合才能取得效果。标题标签长度不超过20个汉字最好。描述标签要清晰明了的写出网页简介内容,突出关键词,不要太长和写与网页内容不相干的内容
2、导航栏目优化,导航栏用图片对于搜索引擎很不利,最好用文字链接,并且适当对导航栏字体加粗。
3、页面字体优化,网页内容标题中包含关键词可以用加大字体或加粗,文本内容出现的关键词可以用不同的颜色或加粗。如“人才集市”中出现“宁波招聘会:8月15日专场招聘会”那么“宁波招聘会“加粗更有利百度的收录。另外文本中有其他页面的关键词,可将这个关键词加上超链接,导向相关页面。如在最新资讯和人才集市中都有”宁波招聘会“这个关键词,那么可以在最新资讯的”宁波招聘会“做个超链接,点击可以跳到人才集市页面中的这条消息,这样有助于提高相关页面的访问量。
4、关键词密度,每个网页突出的关键词不要超过3个,关键词密度一般在3%左右比较合适。
5、论坛宣传:有两种,一种是选择自己潜在客户在的论坛,如宁波当地主流论坛;另一个是人气很旺的门户论坛,如新浪。这里发帖的质量很重要,可以利用口碑宣传。我想在那发个有关招聘会的帖子,然后叫大家去扮演求职者和企业的角色去回复帖子,谈谈到我们招聘会现场的一些好的感受来达到一个好的口碑宣传。据我在宁波主流论坛发布的帖子浏览率平均为30左右,在余慈论坛一个招聘会的帖子点击率达到140多。即使没给网站带来多少点击率但是曝光率还是挺高的。
6、网站的粘度:网站的内容比较能吸引人去看,而且来了一次还会来第二次。网站的内容能否吸引人再次来阅读是很重要的。或者可以定期推出特色专题来吸引用户。
7、图片优化,在网页制作时可以对网站的图片加入文字注释,这样百度根据关键词搜索图片时我们网站的图片能够被收录,从而带来链接。我们也许可以将媒体关注和公司简介、团体导航中的图片加些文字注释测试一下
8、发外链,外部链接顾名思义就是自己的内容在别人的网站,论坛上出现的频率度,当然越多越好。一定要保证这些链接的质量,要控制数量,不能发的太多,要知道质比数更重要;内容即不要太空洞,也不要一直的重复一样的;不能偏离主题,也不要到和自己网站无关的地方发贴,从而浪费资源;每个外链指向的可以是你的子页面,尽量避免每个主题和主页在保持一致。
9、伪原创(优化)
可以听到无数的呼声中都在说增加伪原创,因为这是很必须,不是每一个人都是大作家,他们也写不出旷世奇作,那就要来点虚的了,当然这不是就可以说随便拿别人的东西。要做到不被作者看出,不被收录工具看出,就是说要面目全非,让谁看了都说是你写的就成功了。步骤如下:
1.更改标题:这是最关键的,我们可把意思理解了,更换成不一样的话,但表达的内容要是一致的,只是方式不同罢了;2.修改文章内容:改动原创成为自己的东西关键就要看内容了,这里最为重要的就是开始和结束了,这是人们看文章的一种合理习惯,没有人会无聊到把每一个字都看仔细了,这就要看改文章人的水平了,要既要让关键字出现的合情,又要把文章的内容修饰的合理。这样就可以让引擎认可你了。
10、原创(内容)
多写一些自己的东西传上去,既真实被收录的机会又高,这是毋庸置疑的。有人就会说了,那去做伪原创多省事啊,这里就要记住了,伪原创无论你做的多真实,思路永远是别人的,是在走他们走过的路线,更不要忘了伪原创前面始终都有一个‘伪’字,这就是表明不真实。所以如果是想推网站的各位站长们就要花更多的心思在原创上了,付出就要收获,相信这是不变的真理。企业网站优化