当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 最近我对spi滤包技术(就是防火墙基于用户级的滤包)做了一番研究,也自己编程进行了实现,到现在,也算是有些心得了吧。
 

 

 ·基于arp欺骗的嗅探原理     »显示摘要«
    摘要: 嗅探器(sniffer)是一种刺探网络中传输数据的工具。为达到这一目的,一般的做法是设置网卡为混杂模式,这样就可以嗅探到所有经过本机网卡的数据(这种一般的sniffer原理不在此阐述)。但是这种sniffer有一个缺点,就是它只适用于共享式局域网,对于交换式局域网无效。因为在交换式局域网中,网络中的数据并不会经过每一台主机的网卡,所以对于交换式局域网,就要用另外一种更为主动的方法去嗅探,那就是基......
    摘要:  在vc环境下,mfc console程序默认行为是单线程工作环境。我们在“工程->设置->c\c++”下的code generation选项中,将use run-time library设为multithreaded(多线程)。也可以在当前当前的project options 中加入“/mt”。(表示使用多线程版本的c runtime函数库) #include #include ......


关于spi滤包技术的研究

最近我对spi滤包技术(就是防火墙基于用户级的滤包)做了一番研究,也自己编程进行了实现,到现在,也算是有些心得了吧.因此,写出这篇算是总结也算是心得的东西拿出来与大家分享,希望对大家有用.在进入正题之前,我先要感谢那些无私共享出自己研究成果的前辈们,尤其是safechina的too2y,他的文章«基于spi的数据报过滤原理与实现»可以说是我研究spi滤包技术的良师,说得不好听,我这个源代码实际上就是他那篇源代码的翻版.    说到spi滤包,首先要了解一下winsock2 spi.spi中文名叫服务提供者接口.winsock2 spi允许开发两种服务提供者:传输提供者与名字空间提供者,在这里我们要用到的是传输提供者.winsock2 spi与winsock2 api相对应,分别在winsock的两端.它们的具体结构如下图:-------------------------------------|windows socket 2 应用程序|-----------------------------------------windows socket 2 api|       ws2_32.dll        |---------------------------------------- windows socket 2 spi| 分层提供者 |-------------------spi| 分层提供者 |----------------------------------- spi|      基础提供者       |-----------------------------------

    对于大部分winsock2 api函数,都对应一个winsock2 spi函数.调用这些winsock2 api函数时,ws2_32.dll会将其映射到一个winsock2 spi函数然后执行,以实现我们的正常通信(如wsasend映射到wspsend).而这些spi函数,在需要时以加载dll的形式进入内存.所以,每一个服务提供者就对应一个dll,在需要该服务提供者时,ws2_32.dll就会加载其对应的dll.但是,由上图可以看出来,传输服务提供者可以不止一个(事实上一个系统中的服务提供者都不会只有一个),允许存在多层的服务提供者,那么,我们在实现通信应用程序时,会加载哪一个服务提供者的dll呢?这就是ws2_32.dll的工作了.winsock 2有一个系统配置表,里面存放着系统中所有传输服务提供者的信息.在应用程序建立套接字时,ws2_32.dll在这个winsock 2系统配置表中按顺序搜索第一个与套接字相匹配的传输服务提供者,然后加载此提供者对应的dll.    以上就是应用服务提供者的基本原理了,但是我们现在是要滤包,究竟应该怎么去实现呢?其实,只要我们能自己构建一个服务提供者,然后把它放到所有服务提供者的顶端,那么,ws2_32.dll在需要时就会加载我们自己的服务提供者,就会加载我们自己打造的dll,那么,我们只要在我们自己的这个dll里面实现滤包就行了.但是,具体应该怎么做呢?还是让我们先回到上图吧.从图中可以看出,服务提供者可以是分层的.比如,我们现在加载的是第一层的服务提供者的dll,在这个dll中,有一个唯一的入口函数是wspstartup,这个函数与api wsastartup相对应,其函数原型如下:int wspapi wspstartup(word  wversionrequested,        lpwspdata  lpwspdata,        lpwsaprotocol_infow  lpprotoinfo,        wspupcalltable  upcalltable,        lpwspproc_table  lpproctable);前面说了,这个函数是传输服务提供者的唯一的入口函数,而其他的与api相对应的spi函数是由参数lpproctable给出的.
...   下一页

 ·使用visual c++实现ole剪贴板     »显示摘要«
    摘要:使用visual c++实现ole剪贴板 南京市随园8-2号702室 王珂---- 一、概述 ---- 在windows操作系统中存在两种剪贴板机制:windows标准剪贴板和ole剪贴板机制。 ---- 标准的windows剪贴板是一个被所有windows应用程序共享的系统服务,因此它并没有自己的句柄或类。但你可以通过cwnd类的成员函数来管理剪贴板。 ---- 自从ole(object lin......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE