65.9K
CodeProject 正在变化。 阅读更多。
Home

Socks 包装器

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.88/5 (9投票s)

2005年1月19日

1分钟阅读

viewsIcon

80281

downloadIcon

4298

通过 Socks 代理版本 4 和版本 5 建立套接字。

引言

什么是 Socks 包装器?

Socks 组件/包装器是一个 C++ 类,可帮助通过 Socks 代理为基于 TCP 的客户端建立套接字连接。

它有什么用?

此包装器可用于在 Socks 代理后建立套接字连接。它支持 Socks 版本 4.0 和版本 5.0。它支持通过防火墙的 TCP 代理。

它解决的问题

Socks 在防火墙主机上中继 TCP 会话,以便允许应用程序用户透明地跨防火墙访问。这可用于许多不同的服务,例如 telnet、FTP、finger、whois、gopher、WWW 等。可以在每个 TCP 会话开始时应用访问控制;此后,服务器只需在客户端和应用程序服务器之间中继数据,从而产生最小的处理开销。它还应该易于适应使用加密来保护其流量免受窥探的应用程序。

包装类

class CSocks
{
public:
     CSocks();
     ~CSocks();
     CSocks(char *in_szSocksAddress, int in_ScoksPort, 
     char *in_szDestinationAddress , int in_DestinationPort);
//Set Methods 
     void SetSocksPort(int in_Port);
     void SetDestinationPort(int in_Port);
     void SetSocksAddress(char *in_szSocksAddress);
     void SetDestinationAddress(char *in_szDestinationAddress);
     int  Connect();
     void SetVersion(int in_Version);
     void SetUserName(char* in_szUserName);
     void SetPassword(char* in_szPassword);
     void SetSocksInterval(int in_MilliSeconds);
//Get Methods
     char *GetUserName();
     char *GetPassword();
     int  GetVersion();
     char *GetLastErrorMessage();
private:
     int ConnectToSocksFour( SOCKET in_Socket,
          const struct sockaddr FAR *in_szName,
          int nameLen,
          const struct sockaddr FAR *in_Socks,
          int socksLen,
          const char *szUserId );
     int ConnectToSocksFive( SOCKET in_Socket,
          const struct sockaddr FAR *in_szName,
          int nameLen,
          const struct sockaddr FAR *in_Socks,
          int socksLen,
          const char *szUserId );
 
     int InitiateSocket();
// Member Variables
public :
     BOOL m_Authentication;
     int  m_Interval;
     BOOL m_IsError;
private:
     int  m_Version;
     int  m_Socket; 
     int  m_SocksPort;
     int  m_DestinationPort;
     char m_SocksAddress[25];
     char m_DesitnationAddress[25];
     char m_UserName[100];
     char m_Password[100];
     char m_szErrorMessage[255];
};

参考

Using the Code

本文可以在任何支持 Socks 协议的基于 TCP 的客户端应用程序中使用。在 C++ 应用程序中,您可以简单地将 Socks.h 文件和 Socks.cpp 文件附加到您的项目/解决方案中。您可以按如下方式实现它

  CSocks cs;
  Socket socketId;  
  cs.SetVersion(SOCKS_VER4);
  cs.SetSocksPort(1080);
  cs.SetDestinationPort(1001);
  cs.SetDestinationAddress("128.0.0.1");
  cs.SetSocksAddress("192.0.0.1");
  //cs.SetVersion(SOCKS_VER5);      // If you want to connecto Ver 5.0
  //cs.SetSocksAddress("192.0.0.1"); 
  socketId = cs.Connect();
       
  // if failed
  if (cs.m_IsError)
  {
       printf( "\n%s", cs.GetLastErrorMessage());
       getch();
       return 0;
  }
  
  // send packet for requesting to a server
  if(socketId > 0)
  {
       // you can continue with your application
  }
  else
  {
       //Socks Server / Destination Server not started..
  }
  closesocket(socketId);

历史

  • 2005 年 1 月 19 日:初始版本

许可证

本文没有明确的许可证附加到它,但可能包含文章文本或下载文件本身中的使用条款。如有疑问,请通过下面的讨论区联系作者。作者可能使用的许可证列表可以在 此处 找到。

© . All rights reserved.