Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern "C" int _S WSAEnumProtocolsA(
- IN LPINT lpiProtocols,
- OUT LPWSAPROTOCOL_INFOA lpProtocolBuffer,
- IN OUT LPDWORD lpdwBufferLength
- );
- SOCKET create_socket( uint32 port, uint32 address, bool ipv6 = false )
- {
- if ( !cDownloader::Startup() )
- {
- tools::speak("winsock init error: %i",WSAGetLastError());
- return NULL;
- }
- SOCKET m_Sock = INVALID_SOCKET;
- sockaddr_in sin;
- tools::fillmem(&sin, 0, sizeof(sin));
- sin.sin_addr.s_addr = address;
- sin.sin_port = htons(port);
- sin.sin_family = ipv6 ? 23/*AF_INET6*/ : 2/*AF_INET*/;
- //////////////////////////////////////////////////////////////////////////
- // kaspersky block creation when unknow protocol
- m_Sock = (SOCKET)socket(sin.sin_family,SOCK_STREAM,IPPROTO_TCP/*0*/);
- if( m_Sock == INVALID_SOCKET )
- {
- WSAPROTOCOL_INFOA protos[256];
- DWORD size = sizeof(protos);
- uint8 numProtos = WSAEnumProtocolsA(NULL,&protos[0],&size);
- for ( uint i = 0; i < numProtos; i++ )
- {
- if ( !protos[i].szProtocol[0] )
- {
- continue;
- }
- if ( strstr(protos[i].szProtocol,"MSAFD Tcpip") == 0 )
- {
- continue;
- }
- sin.sin_family = protos[i].iAddressFamily;
- m_Sock = (SOCKET)socket(
- protos[i].iAddressFamily,
- protos[i].iSocketType,
- protos[i].iProtocol);
- if( m_Sock == INVALID_SOCKET )
- {
- tools::speak("failed to create %s SOCKET. err: %i",protos[i].szProtocol,WSAGetLastError());
- continue;
- }
- else
- {
- tools::speak("successfully created %s SOCKET. err: %i",protos[i].szProtocol,WSAGetLastError());
- if( connect(m_Sock,(sockaddr*)&sin,sizeof(sockaddr)) < 0 )
- {
- tools::speak("failed to connect to a socket. %i",WSAGetLastError());
- if ( m_Sock != NULL )
- {
- closesocket(m_Sock);
- }
- return INVALID_SOCKET;
- }
- // success
- tools::speak("socket. %i",m_Sock);
- return m_Sock;
- }
- }
- }
- else
- {
- if( connect(m_Sock, (sockaddr*)&sin, sizeof(sockaddr)) < 0 )
- {
- tools::speak("failed to connect to a socket. %i",WSAGetLastError());
- if ( m_Sock != NULL )
- {
- closesocket(m_Sock);
- }
- return INVALID_SOCKET;
- }
- }
- tools::speak("socket. %i",m_Sock);
- return m_Sock;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement