基于SPI的LSP网络封包截获

、、、首先我不是原创、、、、、

转载别人的然后自己学习,网上有很多资料。大家可以先看《windows防火墙与网络封包截获》然后再看“基于SPI 的网络封包截获”。应该就差不多了

我会在地址下方给出这些资料链接、、、、

还有源码。

首先先安装LSP:

#include <Ws2spi.h>
#include <Sporder.h>  // 定义了WSCWriteProviderOrder()函数
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Rpcrt4.lib") // 实现了UuidCreate()函数
#pragma comment(lib, sporder.lib )
 
//定义要安装的LSP的硬编码,在卸载LSP时还要会使用;
GUID ProviderGuid={0xd3c21122, 0x85e1, 0x48f3, {0x9a,0xb6,0x23,0xd9,0x0c,0x73,0x07,0xef}};

//枚举当前各协议服务提供者的函数;
LPWSAPROTOCOL_INFOW GetProvider(LPINT lpnTotalProtocols)
{
 DWORD dwSize = 0;
 int nError;
 LPWSAPROTOCOL_INFOW pProtoInfo = NULL;  //用于申请存放服务提供者结构的内存空间;
 
 // 取得需要的长度,即通过将WSCEnumProtocols函数的dwSize参数置0进行第一次调用,后
 //以获得枚举服务提供者所需的缓冲区大小,置于dwSize变量中;
 if(::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError) == SOCKET_ERROR)
 {
  if(nError != WSAENOBUFS)
   return NULL;
 }
 
 //根据dwSize中的值来申请内存空间;
 pProtoInfo = (LPWSAPROTOCOL_INFOW)::GlobalAlloc(GPTR, dwSize);
 //第二次通过WSCEnumProtocols()正式枚举到各服务提供者并存放于pProtoInfo(数组)中,
 //并将服务提供者的个数存到lpnTotalProtocols中;
 *lpnTotalProtocols = ::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError);
 //将pProtoInfo返回给函数调用者;
 return pProtoInfo;
}
 

void FreeProvider(LPWSAPROTOCOL_INFOW pProtoInfo)
{
 //释放用于存放服务提供者数组的内存空间,pProtoInfo;
 ::GlobalFree(pProtoInfo);
}
 

//枚举现有的各服务提供者;
void query()
{
 LPWSAPROTOCOL_INFOW pProtoInfo;
 int nProtocols;
 pProtoInfo = GetProvider(&nProtocols);
 for(int i=0; i<nProtocols; i++)
 {
  
  printf(" Protocol: %ws \n", pProtoInfo[i].szProtocol);
  printf(" CatalogEntry
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值