⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sockspacket.h

📁 基于Winsock2的支持断点续传和SOCKS代理的HTTP下载类 CHttpDownload
💻 H
字号:
#ifndef __SOCKSPACKET__H__INCLUDED__
#define __SOCKSPACKET__H__INCLUDED__

//常量定义
const DWORD	SOP_SEND_TIMEOUT= 120*1000;		
const DWORD	SOP_RECV_TIMEOUT= 120*1000;		
const UINT	SOP_BUFFER_SIZE	= 4096;			// 数据接收缓冲区大小
const BYTE	BYTE_NULL		= 0x00;			// 空字节
const WORD	WORD_NULL		= 0x0000;		// 空字
const DWORD UNKNOWN_IP		= 0x00000001;	// 特殊的IP地址,指明要SOCKS4A PROXY解析域名
const BYTE	AUTH_OK			= 0x00;

// SOCKS的类型
const UINT	SOCKS_TYPE_4	= 0x01;
const UINT	SOCKS_TYPE_4A	= 0x02;
const UINT	SOCKS_TYPE_5	= 0x03; 

// SOCKS的版本号
const BYTE	VER_SOCKS4		= 0x04;
const BYTE	VER_SOCKS4A		= 0x04;
const BYTE	VER_SOCKS5		= 0x05;
const BYTE	VER_SOCKSUNKNOWN= 0xFF;

//所支持的命令
const BYTE	CMD_CONNECT		= 0x01;
const BYTE	CMD_BIND		= 0x02;
const BYTE	CMD_UDP			= 0x03;	// (SOCKS5 ONLY)
const BYTE	CMD_UNKNOWN		= 0xFF;

/* SOCKS4(A)错误(返回值) */
const BYTE	REP4_SUCCESS	= 90;
const BYTE	REP4_RESULT		= 90;
const BYTE	REP4_FAIL		= 91;
const BYTE	REP4_NOIDENTD	= 92;
const BYTE	REP4_BADID		= 93;

/* SOCKS5错误(返回值) */
const BYTE	REP5_SUCCESS	= 0x00;
const BYTE	REP5_RESULT		= 0x00;
const BYTE	REP5_FAIL		= 0x01;
const BYTE	REP5_NOTALLOW	= 0x02;
const BYTE	REP5_NETUNREACH	= 0x03;
const BYTE	REP5_HOSTUNREACH= 0x04;
const BYTE	REP5_CONNREF	= 0x05;
const BYTE	REP5_TTLEXP		= 0x06;
const BYTE	REP5_BADCMD		= 0x07;
const BYTE	REP5_BADADDR	= 0x08;

// 验证方式(SOCKS5 ONLY)
const BYTE	AUTH_NONE		= 0x00;
const BYTE	AUTH_GSSAPI		= 0x01;
const BYTE	AUTH_PASSWD		= 0x02;
const BYTE	AUTH_CHAP		= 0x03;
const BYTE	AUTH_UNKNOWN	= 0xFF;

// 地址方式(SOCKS5 ONLY)
const BYTE	ATYP_IPV4ADDR	= 0x01;
const BYTE	ATYP_HOSTNAME	= 0x03;
const BYTE	ATYP_IPV6ADDR	= 0x04;

// 包的类型
const UINT	PACKET_SOCKS4REQ			= 0x01;
const UINT	PACKET_SOCKS4AREQ			= 0x02;
const UINT	PACKET_SOCKS5AUTHREQ		= 0x03;
const UINT	PACKET_SOCKS5AUTHPASSWDREQ	= 0x04;
const UINT	PACKET_SOCKS5REQ			= 0x05;

const UINT	PACKET_SOCKS4REP			= 0x21;
const UINT	PACKET_SOCKS4AREP			= 0x22;
const UINT	PACKET_SOCKS5AUTHREP		= 0x23;
const UINT	PACKET_SOCKS5AUTHPASSWDREP	= 0x24;
const UINT	PACKET_SOCKS5REP			= 0x25;

const UINT	PACKET_SOCKS5UDP			= 0x41;


///////////////////////////////////////////////////////
//
//	SOCK4 Proxy
//
//////////////////////////////////////////////////////
typedef struct _tagSocks4Req
{
	BYTE	bVer;		// 版本号 0x04
	BYTE	bCmd;		// 命令
	WORD	wDestPort;	// 目标端口
	DWORD	dwDestIP;	// 目标IP地址
	LPCTSTR	pszUserID;	// 用户ID
	BYTE	bNULL;		// 0x00
}SOCKS4REQ,*PSOCKS4REQ;

typedef struct _tagSock4Rep
{
	BYTE	bVer;
	BYTE	bRep;		// 90-93
	WORD	wDestPort;
	DWORD	dwDestIP;
}SOCK4REP,SOCKS4AREP,*PSOCK4REP,*PSOCK4AREP;

///////////////////////////////////////////////////////
//
//	SOCK4A Proxy
//
//////////////////////////////////////////////////////

typedef struct _tagSocks4AReq
{
	BYTE	bVer;			// 版本号 0x04
	BYTE	bCmd;			// 命令
	WORD	wDestPort;		// 目标端口
	DWORD	dwDestIP;		// 目标机器IP地址 0x000000XX
	LPCTSTR	pszUserID;		// 用户ID
	BYTE	bNULL1;			// 分隔用
	LPCTSTR	pszDestHostName;// 目标机器域名
	BYTE	bNULL2;			// 结束0x00
}SOCKS4AREQ,*PSOCKS4AREQ;

///////////////////////////////////////////////////////
//
//	SOCK5 Proxy
//
//////////////////////////////////////////////////////
// Auth-Request
typedef struct _tagSocks5AuthReq
{
	BYTE	bVer;
	BYTE	bNAuth;
	LPCTSTR	pszAuth;
}SOCKS5AUTHREQ,*PSOCKS5AUTHREQ;

// Auth-Reply
typedef struct _tagSocks5AuthRep
{
	BYTE	bVer;
	BYTE	bAuth;
}SOCKS5AUTHREP,*PSOCKS5AUTHREP;

// USERNAME/PASSWORD验证 - Request
typedef struct _tagSocks5AuthPasswdReq
{
	BYTE	bVer;
	BYTE	bUserNameLen;
	LPCTSTR	pszUserName;
	BYTE	bPasswdLen;
	LPCTSTR	pszPasswd;
}SOCKS5AUTHPASSWDREQ,*PSOCKS5AUTHPASSWDREQ;

// USERNAME/PASSWORD验证 - Reply
typedef struct _tagSocks5AuthPasswdRep
{
	BYTE	bVer;
	BYTE	bStatus;
}SOCKS5AUTHPASSWDREP,*PSOCKS5AUTHPASSWDREP;
 
// Request
typedef struct _tagSocks5Req
{
	BYTE	bVer;
	BYTE	bCmd;
	BYTE	bRsv;
	BYTE	bAtyp;
	LPCTSTR	pszDestAddr;	// 首字节是长度,接下来是域名,没有结束的NULL串(03)
	WORD	wDestPort;
}SOCKS5REQ,*PSOCKS5REQ;

// Reply
typedef struct _tagSocks5Rep
{
	BYTE	bVer;
	BYTE	bRep;
	BYTE	bRsv;
	BYTE	bAtyp;
	LPSTR	pszBindAddr;
	WORD	wBindPort;
}SOCKS5REP,*PSOCKS5REP;


// UDP (Socks5 ONLY)
typedef struct _tagSocks5UDP
{
	WORD	wRsv;
	BYTE	bFrag;
	BYTE	bAtyp;
	LPSTR	pszDestAddr;
	WORD	wDestPort;
	LPSTR	pszData;
}SOCKS5UDP,*PSOCKS5UDP;

// 其他定义
// Request-Packet (TCP ONLY)
typedef union _tagSocksReqPacket
{
	SOCKS4REQ				socks4Req;
	SOCKS4AREQ				socks4aReq;
	SOCKS5AUTHREQ			socks5AuthReq;
	SOCKS5AUTHPASSWDREQ		socks5AuthPasswdReq;
	SOCKS5REQ				socks5Req;
}SOCKSREQPACKET,*PSOCKSREQPACKET;

// Reply-Packet (TCP ONLY)
typedef union _tagSocksRepPacket
{
	SOCK4REP				socks4Rep;
	SOCKS4AREP				socks4aRep;
	SOCKS5AUTHREP			socks5AuthRep;
	SOCKS5AUTHPASSWDREP		socks5AuthPasswdRep;
	SOCKS5REP				socks5Rep;
}SOCKSREPPACKET,*PSOCKSREPPACKET;

// Request-Reply UDP Packet (UDP ONLY)
typedef union _tagSocksUDPPacket
{
	SOCKS5UDP				socks5UDP;
}SOCKSUDPPACKET,*PSOCKSUDPPACKET;


//函数 (SOP: Socks Packet)
// 发送
int SOP_PacketSize(PSOCKSREQPACKET pPacket,UINT nPacketType);
int SOP_Pack(char *pszDest,PSOCKSREQPACKET pPacket,UINT nPacketType);
int SOP_SendPacket(SOCKET hSocket,PSOCKSREQPACKET pPacket,UINT nPacketType,DWORD dwTimeout = SOP_SEND_TIMEOUT);
int SOP_SendSocks4Req(SOCKET hSocket,BYTE bCmd,WORD wDestPort,DWORD dwDestIP,const char * pszUserID  = NULL ,DWORD dwTimeout  = SOP_SEND_TIMEOUT );
int SOP_SendSocks4aReq(SOCKET hSocket,BYTE bCmd,WORD wDestPort,const char* pszDestHostName,const char * pszUserID  = NULL ,DWORD dwTimeout  = SOP_SEND_TIMEOUT );
int SOP_SendSocks5AuthReq(SOCKET hSocket,BYTE bNAuth,const char* pszAuth,DWORD dwTimeout  = SOP_SEND_TIMEOUT );
int SOP_SendSocks5AuthPasswdReq(SOCKET hSocket,const char* pszUserName,const char * pszPassword,DWORD dwTimeout  = SOP_SEND_TIMEOUT );
int SOP_SendSocks5Req(SOCKET hSocket,BYTE bCmd,BYTE bAtyp,const char * pszDestAddr,WORD wDestPort,DWORD dwTimeout  = SOP_SEND_TIMEOUT );
// 接收
int SOP_RecvPacket(PBSD pBSD,PSOCKSREPPACKET pPacket,UINT nPacketType,DWORD dwTimeout = SOP_RECV_TIMEOUT);
// 其他
BOOL SOP_IsSocksOK( PSOCKSREPPACKET pPacket,UINT nPacketType );

#endif //__SOCKSPACKET__H__INCLUDED__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -