首页 > 代码库 > 基于LSP的网络数据包截获(一) SPI

基于LSP的网络数据包截获(一) SPI

SPI是Service Provider Interface,WinSock2的服务提供者接口。

WinSock2允许开发者编写自己的服务提供者接口SPI程序,自己编写的SPI程序安装到系统后,所有的WinSock请求会先发送到这个程序并由他完成网络调用。

WinSock2 SPI允许开发两类服务提供者:

1.传输服务提供者(transport service provider)

    能够提供建立通信、传输数据、日常数据流控制和错误控制等功能的服务。

    以DLL形式存在,对外只有一个入口函数,即WSPStartup,其中参数LPWSAPRTOCOL_INFOW结构指针决定了其类型。

2.名字空间服务提供者(name space providers)

    把一个网络协议的定址属性和一个或多个用户友好名关联到一起,以便启用与协议无关的名字解析方案。

SPI提供三种协议:分层协议、基础协议、协议链

协议类型由WSAPROTOCOL_INFO结构内的WSAPROTOCOLCHAIN结构中的数据指定。

typedef struct _WSAPROTOCOL_CHAIN{
    int ChainLen;//链的长度
    DWORD ChainEntries[MAX_PROTOCOL_CHAIN];//协议链数组
}WSAPROTOCOLCHAIN,*LPWSAPROTOCOLCHAIN;

  

ChainLen取值不同意义不同:

0:分层协议

1:基础协议

>1:协议链

 

基于LSP的网络数据包截获(一) SPI