• 大小: 25KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: C/C++
  • 标签: socket  proxy  

资源简介

win sockket全局代理驱动(c++ spi) 通过spi驱动实现在的全局代理模块,支持socks4,5,http代理协议。 同时支持ip filter功能, 可用于IE等浏览器。

资源截图

代码片段和文件信息

#include “StdAfx.h“

//
// 进程间全局变量
//
#pragma data_seg(“.inidata“)
int m_iDllCount = 0;
#pragma data_seg()

//
// 进程内全局变量
//
CRITICAL_SECTION gCriticalSection gOutput; // 代码段保护变量
WSPPROC_TABLE NextProcTable   ; // 保存30个服务提供者指针
TCHAR m_sProcessName[MAX_PATH]; // 保存当前进程名称
CLog g_log;

//
// 自定义注册表分支用来保存系统基础服务提供者的路径
//
#define REG_INSTALL_KEY _T(“SYSTEM\\CurrentControlSet\\Services\\WinSock2\\anyx_socks_proxy“)
//#define CONFIG_FILE _T(“C:\\SocksProxy.ini“)
//——————————————————————————————————————
// 私有函数

void GetRightEntryIdItem(
IN WSAPROTOCOL_INFOW *pProtocolInfo 
OUT TCHAR *sItem

{
if(pProtocolInfo->ProtocolChain.ChainLen <= 1)
_stprintf(sItem _T(“%u“) pProtocolInfo->dwCatalogEntryId);
else
_stprintf(sItem _T(“%u“) pProtocolInfo->ProtocolChain
.ChainEntries[pProtocolInfo->ProtocolChain.ChainLen - 1]);
}

BOOL GetHookProvider(
IN WSAPROTOCOL_INFOW *pProtocolInfo 
OUT TCHAR *sPathName

{
TCHAR sItem[21];
GetRightEntryIdItem(pProtocolInfo sItem);

HKEY hSubkey;
DWORD ulDateLenth = MAX_PATH;
TCHAR sTemp[MAX_PATH];

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
 REG_INSTALL_KEY 0 KEY_ALL_ACCESS &hSubkey) != ERROR_SUCCESS)
return FALSE;
if (RegQueryValueEx(hSubkey sItem 0 NULL (BYTE*)sTemp &ulDateLenth)
|| ExpandEnvironmentStrings(sTemp sPathName ulDateLenth) == 0)
return FALSE;
if(sPathName[0] == ‘\0‘ && sTemp[0] != ‘\0‘)
_tcscpy(sPathName sTemp);
RegCloseKey(hSubkey);

return TRUE;
}

//代理类型常量
#define VER_SOCKS5 5
#define VER_SOCKS4 4


//socks proxy info;
bool b_direct = true;
char szSocksHost[MAX_PATH] = {0};
int szSocksPort = 1080;
char szUser[MAX_PATH] = {0};
char szPass[MAX_PATH] = {0};
int szVer=VER_SOCKS5;
//igrone ip;
char szIgnore[1024]={0};

HANDLE hLogFile; // 日志文件句柄


//SOCKET信息结构
typedef struct _SOCKET_INFO {
    int nProxySocket;   //代理SOCKET
    int nNomalSocket;   //正常SOCKET
    int nVer;          //SOCKET(Ver4/Ver5)
bool bDirect;//
} SOCKET_INFO;

static SOCKET_INFO g_SocketList[1024] = {0};    //SOCKET信息列表
static int g_nIndex = 0;                        //SOCKET信息列表索引

//向列表中插入SOCKET信息
VOID ins_list(const SOCKET_INFO socket_info)
{
    int i = 0;

    if (g_nIndex >= 1024)
g_nIndex = 0;

    for (i=0; i        if (memcmp(&socket_info &g_SocketList[i] sizeof(SOCKET_INFO)) == 0)
{
            return;    //已经在list中了
}
    }
    memcpy(&g_SocketList[g_nIndex] &socket_info sizeof(SOCKET_INFO));
    g_nIndex++;
//InterlockedIncrement(&g_nIndex);
}

//从列表中删除SOCKET信息
VOID del_list(const int nSocket)
{
    int i = 0;
    SOCKET_INFO *socket_info = NULL;

    for (i=0; i        socket_info = &g_SocketList[i];
        if (socket_info->nProxySocket == nSocket ) 
{
int Errno;
            //NextProcTable.lpWSPCloseSocket(socket_info->nProxySocket&Errno);
            NextProcTable.lpWSPCloseSocket(socket_info-

评论

共有 条评论