VC++基于LSP实现数据拦截

本文介绍了如何使用VC++基于LSP(分层服务提供商)实现数据拦截。LSP在Windows网络套接字中提供扩展能力,常用于家长控制和Web内容过滤。然而,不正确的LSP可能导致Winsock目录损坏,甚至影响网络连接。文中提供了相关代码,并推荐了一位专家的人工智能教程。
摘要由CSDN通过智能技术生成
               


LSP即分层服务提供商,Winsock 作为应用程序的 Windows 的网络套接字工具,可以由称为“分层服务提供商”的机制进行扩展。Winsock LSP 可用于非常广泛的实用用途,包括 Internet 家长控制 (parental control) 和 Web 内容筛选。在以前版本的 Windows XP 中,删除不正确的(也称为“buggy”)LSP 可能会导致注册表中的 Winsock 目录损坏,潜在地导致所有网络连接的丢失。


请见代码



#define UNICODE#define _UNICODE#include <Winsock2.h>#include <Ws2spi.h>#include <Sporder.h>#include <Windows.h>#include <stdio.h>#include <tchar.h>#include "PhoenixLSP.h"#include "../common/Debug.h"#include "../common/PMacRes.h"#include "Acl.h"#pragma comment(lib, "Ws2_32.lib")CAcl g_Acl;       // 访问列表,用来检查会话的访问权限WSPUPCALLTABLE g_pUpCallTable;  // 上层函数列表。如果LSP创建了自己的伪句柄,才使用这个函数列表WSPPROC_TABLE g_NextProcTable;  // 下层函数列表TCHAR g_szCurrentApp[MAX_PATH]; // 当前调用本DLL的程序的名称BOOL APIENTRY DllMain( HANDLE hModule,                        DWORD  ul_reason_for_call,                        LPVOID lpReserved      )switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH:  {   // 取得主模块的名称   ::GetModuleFileName(NULL, g_szCurrentApp, MAX_PATH);  }  break; } return TRUE;}int WSPAPI WSPStartup(  WORD wVersionRequested,  LPWSPDATA lpWSPData,  LPWSAPROTOCOL_INFO lpProtocolInfo,  WSPUPCALLTABLE UpcallTable,  LPWSPPROC_TABLE lpProcTable){ ODS1(L"  WSPStartup...  %s \n", g_szCurrentApp);  if(lpProtocolInfo->ProtocolChain.ChainLen <= 1) {   return WSAEPROVIDERFAILEDINIT; }  // 保存向上调用的函数表指针(这里我们不使用它) g_pUpCallTable = UpcallTable; // 枚举协议,找到下层协议的WSAPROTOCOL_INFOW结构  WSAPROTOCOL_INFOW NextProtocolInfo; int nTotalProtos; LPWSAPROTOCOL_INFOW pProtoInfo = GetProvider(&nTotalProtos); // 下层入口ID  DWORD dwBaseEntryId = lpProtocolInfo->ProtocolChain.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值