当前位置:   article > 正文

基于SPI的LSP网络封包截获_lsp截获qq

lsp截获qq

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

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

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

还有源码

首先先安装LSP:

  1. #include <Ws2spi.h>
  2. #include <Sporder.h> // 定义了WSCWriteProviderOrder()函数
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #pragma comment(lib, "Ws2_32.lib")
  6. #pragma comment(lib, "Rpcrt4.lib") // 实现了UuidCreate()函数
  7. #pragma comment(lib, sporder.lib )
  8. //定义要安装的LSP的硬编码,在卸载LSP时还要会使用;
  9. GUID ProviderGuid={0xd3c21122, 0x85e1, 0x48f3, {0x9a,0xb6,0x23,0xd9,0x0c,0x73,0x07,0xef}};
  10. //枚举当前各协议服务提供者的函数;
  11. LPWSAPROTOCOL_INFOW GetProvider(LPINT lpnTotalProtocols)
  12. {
  13. DWORD dwSize = 0;
  14. int nError;
  15. LPWSAPROTOCOL_INFOW pProtoInfo = NULL; //用于申请存放服务提供者结构的内存空间;
  16. // 取得需要的长度,即通过将WSCEnumProtocols函数的dwSize参数置0进行第一次调用,后
  17. //以获得枚举服务提供者所需的缓冲区大小,置于dwSize变量中;
  18. if(::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError) == SOCKET_ERROR)
  19. {
  20. if(nError != WSAENOBUFS)
  21. return NULL;
  22. }
  23. //根据dwSize中的值来申请内存空间;
  24. pProtoInfo = (LPWSAPROTOCOL_INFOW)::GlobalAlloc(GPTR, dwSize);
  25. //第二次通过WSCEnumProtocols()正式枚举到各服务提供者并存放于pProtoInfo(数组)中,
  26. //并将服务提供者的个数存到lpnTotalProtocols中;
  27. *lpnTotalProtocols = ::WSCEnumProtocols(NULL, pProtoInfo, &dwSize, &nError);
  28. //将pProtoInfo返回给函数调用者;
  29. return pProtoInfo;
  30. }
  31. void FreeProvider(LPWSAPROTOCOL_INFOW pProtoInfo)
  32. {
  33. //释放用于存放服务提供者数组的内存空间,pProtoInfo;
  34. ::GlobalFree(pProtoInfo);
  35. }
  36. //枚举现有的各服务提供者;
  37. void query()
  38. {
  39. LPWSAPROTOCOL_INFOW pProtoInfo;
  40. int nProtocols;
  41. pProtoInfo = GetProvider(&nProtocols);
  42. for(int i=0; i<nProtocols; i++)
  43. {
  44. printf(" Protocol: %ws \n", pProtoInfo[i].szProtocol);
  45. printf(" CatalogEntry
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/623177
推荐阅读
相关标签
  

闽ICP备14008679号