资源简介
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-
- 上一篇:南京大学C语言课件
- 下一篇:VxWorks串口编程代码
相关资源
- Linuxsocket文件传输C语言支持断点
- socket tcp通信 多客户端
- C语言基于socket多人聊天
- C语言编写Socket编写进程间传文件
- 基于socket通信的,利用MFC实现TCP通信
- Linux环境下C语言Socket编程——客户端
- C语言socket编程实现网络数据传输
- websocket_server_client
- C语言socket/smtp发送邮件,支持附件,
- Windows下纯C语言Socket、smtp发送邮件,
- C Socket通信多线程数据双向收发VS201
- 利用RawSocket实现简单的Ping程序 ICMP协
- C++ UDP SOCKET 简单网络通讯
- Socket异步通信 MFC
- 基于TCP的聊天室c++、MFC
- C++局域网文件传输
- 用Socket 实现http协议
- c++实现的双向通信的socket小程序
- linux环境下C语言实现图片的socket传输
- MFC开发的与服务器通讯程序
- C语言实现socket服务端和客户端
- linux C语言 socket通信聊天小程序
- linux下的简易聊天室
- socket文件传输C++
- linux下使用socket实现ftp的客户端和服务
- 微软官方MFC UDP socket 聊天例程
- 一个简单的vs c++ socket通讯程序
- c++ socket类封装(udp/tcp)
- websocket编程C语言源码
- C语言+Socket实现文件传输
评论
共有 条评论