Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

WinSocks2

By: a guest on Jan 18th, 2012  |  syntax: C++  |  size: 2.94 KB  |  views: 8  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #ifndef WIN32_LEAN_AND_MEAN
  2. #define WIN32_LEAN_AND_MEAN
  3. #endif
  4.  
  5. #include "stdafx.h"
  6. #include "WSockHttp.h"
  7. #include "ConsoleRedir.h"
  8. #include <winsock2.h>
  9. #include <ws2tcpip.h>
  10. #include <stdio.h>
  11.  
  12. #pragma comment(lib, "Ws2_32.lib")
  13.  
  14. #define _DEBUG
  15.  
  16. int APIENTRY _tWinMain(HINSTANCE hInstance,
  17.                      HINSTANCE hPrevInstance,
  18.                      LPTSTR    lpCmdLine,
  19.                      int       nCmdShow)
  20. {
  21.         RedirectIOToConsole();
  22.  
  23.  
  24.         //Init WinSocks
  25.         WSADATA wsaData;
  26.         if(int iRet = WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
  27.         {
  28.                 _tprintf(TEXT("Error '%d' starting Winsocks: %d\n"), iRet, WSAGetLastError());
  29.                 return iRet;
  30.         }
  31.  
  32.         //Get IP address info of given host
  33.         struct addrinfoW        servAddr,
  34.                                                 *pServAddr,
  35.                                                 *pServRes;
  36.  
  37.         ZeroMemory(&servAddr, sizeof(servAddr));
  38.  
  39.         servAddr.ai_family = AF_INET;
  40.         servAddr.ai_socktype =  SOCK_STREAM;
  41.         servAddr.ai_protocol = IPPROTO_TCP;
  42.  
  43.         const TCHAR cpServer[] = TEXT("www.google.com");
  44.  
  45.         //Resolve hostname to IP
  46.         if(int iRet = GetAddrInfo(cpServer, TEXT("80"), &servAddr, &pServRes))
  47.         {
  48.                 _tprintf(TEXT("Error getting server information: %d\n"), iRet);
  49.                 WSACleanup();
  50.         }
  51.  
  52.         //Check if we can connect to the server
  53.         SOCKET servSocket = INVALID_SOCKET;
  54.  
  55.         //Loop through each address in the linked list, until we get a connectable socket
  56.         pServAddr = pServRes;
  57.  
  58.         while(1)
  59.         {
  60.                 //Attempt to create a socket and connect
  61.                 servSocket = socket(pServAddr->ai_family, pServAddr->ai_socktype, pServAddr->ai_protocol);
  62.                 int iRes = connect(servSocket, pServAddr->ai_addr, (int)pServAddr->ai_addrlen);
  63.  
  64.                 //Check we have a valid socket and more servers
  65.                 if(iRes == SOCKET_ERROR)
  66.                 {
  67.                         //Close socket
  68.                         closesocket(servSocket);
  69.                         servSocket = INVALID_SOCKET;
  70.  
  71.                         //Go to next address, if there is one
  72.                         if(pServAddr->ai_next != NULL)
  73.                         {
  74.                                 //Go to next server
  75.                                 pServAddr = pServAddr->ai_next;
  76.                         }
  77.                         else
  78.                         {
  79.                                 //We've ran out of servers, return with error
  80.                                 _tprintf(TEXT("Error establishing connection to server: %d\n"), WSAGetLastError());
  81.                                 FreeAddrInfo(pServRes);
  82.                                 WSACleanup();
  83.                                 return 2;
  84.                         }
  85.                 }
  86.                 else
  87.                 {
  88.                         //We have an invalid socket, continue
  89.                         FreeAddrInfo(pServRes);
  90.                         break;
  91.                 }
  92.         }
  93.  
  94.         //Send HTTP header to server
  95. #define MAX_HEADER_LEN 512
  96.        
  97. #ifdef UNICODE
  98.  
  99.         char* cpHost = (char*)malloc(sizeof(char) * (_tcslen(cpServer)+1));
  100.         wcstombs(cpHost, cpServer, _tcslen(cpServer));
  101.         cpHost[_tcslen(cpServer)] = '\0';
  102.  
  103. #else
  104.         char* cpHost = cpServer;
  105. #endif
  106.  
  107.         char cpHeader[MAX_HEADER_LEN];
  108.         sprintf(cpHeader, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", "/", cpHost);
  109.  
  110. #ifdef UNICODE
  111.         free(cpHost);
  112. #endif
  113.  
  114.         //Send the HTTP request to the sever
  115.         int iSent;
  116.         if(iSent = send(servSocket, cpHeader, strlen(cpHeader), 0) == SOCKET_ERROR)
  117.         {
  118.                 _tprintf(TEXT("Error sending header to server: %d\n"), WSAGetLastError());
  119.                 WSACleanup();
  120.                 return 2;
  121.         }
  122.  
  123.         _tprintf(TEXT("Sent '%d' bytes\n"), iSent);
  124.  
  125.         return 0;
  126. }
clone this paste RAW Paste Data