Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1.  
  2. extern "C" int _S WSAEnumProtocolsA(
  3.                                     IN LPINT lpiProtocols,
  4.                                     OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
  5.                                     IN OUT LPDWORD lpdwBufferLength
  6.                                     );
  7.  
  8.  
  9. SOCKET create_socket( uint32 port, uint32 address, bool ipv6 = false )
  10. {
  11.   if ( !cDownloader::Startup() )
  12.   {
  13.     tools::speak("winsock init error: %i",WSAGetLastError());
  14.     return NULL;
  15.   }
  16.  
  17.   SOCKET m_Sock = INVALID_SOCKET;
  18.  
  19.   sockaddr_in sin;
  20.   tools::fillmem(&sin, 0, sizeof(sin));
  21.   sin.sin_addr.s_addr = address;
  22.   sin.sin_port          = htons(port);
  23.   sin.sin_family      = ipv6 ? 23/*AF_INET6*/ : 2/*AF_INET*/;
  24.  
  25.   //////////////////////////////////////////////////////////////////////////
  26.   // kaspersky block creation when unknow protocol
  27.   m_Sock = (SOCKET)socket(sin.sin_family,SOCK_STREAM,IPPROTO_TCP/*0*/);
  28.  
  29.   if( m_Sock == INVALID_SOCKET )
  30.   {
  31.     WSAPROTOCOL_INFOA protos[256];
  32.     DWORD      size = sizeof(protos);
  33.     uint8 numProtos = WSAEnumProtocolsA(NULL,&protos[0],&size);
  34.  
  35.     for ( uint i = 0; i < numProtos; i++ )
  36.     {
  37.       if ( !protos[i].szProtocol[0] )
  38.       {
  39.         continue;
  40.       }
  41.  
  42.       if ( strstr(protos[i].szProtocol,"MSAFD Tcpip") == 0 )
  43.       {    
  44.         continue;
  45.       }
  46.  
  47.       sin.sin_family = protos[i].iAddressFamily;
  48.  
  49.       m_Sock = (SOCKET)socket(
  50.         protos[i].iAddressFamily,
  51.         protos[i].iSocketType,
  52.         protos[i].iProtocol);
  53.  
  54.       if( m_Sock == INVALID_SOCKET )
  55.       {
  56.         tools::speak("failed to create %s SOCKET. err: %i",protos[i].szProtocol,WSAGetLastError());
  57.         continue;
  58.       }
  59.       else
  60.       {
  61.         tools::speak("successfully created %s SOCKET. err: %i",protos[i].szProtocol,WSAGetLastError());
  62.  
  63.         if( connect(m_Sock,(sockaddr*)&sin,sizeof(sockaddr)) < 0 )
  64.         {
  65.           tools::speak("failed to connect to a socket. %i",WSAGetLastError());
  66.  
  67.           if ( m_Sock != NULL )
  68.           {
  69.             closesocket(m_Sock);
  70.           }
  71.  
  72.           return INVALID_SOCKET;
  73.         }
  74.  
  75.         // success
  76.         tools::speak("socket. %i",m_Sock);
  77.         return m_Sock;
  78.       }
  79.     }
  80.   }
  81.   else
  82.   {
  83.     if( connect(m_Sock, (sockaddr*)&sin, sizeof(sockaddr)) < 0 )
  84.     {
  85.       tools::speak("failed to connect to a socket. %i",WSAGetLastError());
  86.      
  87.       if ( m_Sock != NULL )
  88.       {
  89.         closesocket(m_Sock);
  90.       }
  91.  
  92.       return INVALID_SOCKET;
  93.     }
  94.   }
  95.  
  96.   tools::speak("socket. %i",m_Sock);
  97.   return m_Sock;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement