Advertisement
imk0tter

cURL twitline

Jul 18th, 2011
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <math.h>
  6. #include <curl/curl.h>
  7.  
  8. #define WIN32_LEAN_AND_MEAN
  9. #include <windows.h>
  10. #include <process.h>
  11.  
  12. #define URL_BASE "http://twitter.com/statuses/update.xml"
  13.  
  14. #define TWITLINE_VERSION "1.0"
  15.  
  16. int fileLineCount(FILE*);
  17. void fillStrings(FILE*,char**,int);
  18. void cleanStrings(char**,int);
  19. void curl_thread(void * _options);
  20. typedef struct {
  21.     char * postField;
  22.     char * userPwd;
  23.     char * proxy;
  24.     long proxyType;
  25.     long padding;
  26. } CURLOPTIONS;
  27.  
  28. int success = 0;
  29. int threadEnd = 0;
  30.  
  31. int main(int argc, char *argv[])
  32. {
  33.   char *appname = argv[0];
  34.  
  35.     FILE * accounts = 0;
  36.     FILE * comments = 0;
  37.  
  38.     FILE * s4proxys = 0;
  39.     FILE * s5proxys = 0;
  40.  
  41.     bool _s4proxys = false;
  42.     bool _s5proxys = false;
  43.  
  44.     int accountsCount = 0;
  45.     int commentsCount = 0;
  46.  
  47.     int s4proxysCount = 0;
  48.     int s5proxysCount = 0;
  49.  
  50.     int s4proxysCurrent = 0;
  51.     int s5proxysCurrent = 0;
  52.  
  53.     char ** accountsStrings = 0;
  54.     char ** commentsStrings = 0;
  55.  
  56.     char ** s4proxysStrings = 0;
  57.     char ** s5proxysStrings = 0;
  58.   if (argc > 1) {
  59.     /* parse input parameters */
  60.     for (argc--, argv++; *argv; argc--, argv++) {
  61.       if (strncmp(*argv, "-", 1) == 0) {
  62.         if (strncmp(*argv, "-H", 2) == 0) {
  63.           fprintf(stderr,
  64.                   "\rUsage: %s [-a=accounts.txt] [-c=comments.txt] [-s4=socks4.txt] [-s5=socks5.txt]\n",
  65.                   appname);
  66.           exit(1);
  67.         } else if (strncmp(*argv, "-V", 2) == 0) {
  68.           fprintf(stderr, "\r%s %s - %s\n",
  69.                   appname, TWITLINE_VERSION, curl_version());
  70.           exit(1);
  71.         } else if (strncmp(*argv, "-a=", 3) == 0) {
  72.             int len = strlen(*argv) - 3;
  73.             char * fileName = (char*)malloc(len+1);
  74.             strncpy(fileName,*argv+3,len);
  75.             fileName[len] = '\0';
  76.             accounts = fopen(fileName,"r");
  77.             free(fileName);
  78.             if (accounts == NULL) {
  79.                 fprintf(stderr,"\r%s: invalid accounts file\n",appname);
  80.                 exit(1);
  81.             }
  82.         } else if (strncmp(*argv, "-c=", 3) == 0) {
  83.             int len = strlen(*argv) - 3;
  84.             char * fileName = (char*)malloc(len+1);
  85.             strncpy(fileName,*argv+3,len);
  86.             fileName[len] = '\0';
  87.             comments = fopen(fileName,"r");
  88.             free(fileName);
  89.             if (comments == NULL) {
  90.                 fprintf(stderr,"\r%s: invalid comments file\n",appname);
  91.                 exit(1);
  92.             }
  93.         } else if (strncmp(*argv, "-s4=", 4) == 0) {
  94.             int len = strlen(*argv) - 4;
  95.             char * fileName = (char*)malloc(len+1);
  96.             strncpy(fileName,*argv+4,len);
  97.             fileName[len] = '\0';
  98.             s4proxys = fopen(fileName,"r");
  99.             free(fileName);
  100.             if (s4proxys == NULL) {
  101.                 fprintf(stderr,"\r%s: invalid socks4 file\n",appname);
  102.                 exit(1);
  103.             }
  104.         } else if (strncmp(*argv, "-s5=", 4) == 0) {
  105.             int len = strlen(*argv) - 4;
  106.             char * fileName = (char*)malloc(len+1);
  107.             strncpy(fileName,*argv+4,len);
  108.             fileName[len] = '\0';
  109.             s5proxys = fopen(fileName,"r");
  110.             free(fileName);
  111.             if (s5proxys == NULL) {
  112.                 fprintf(stderr,"\r%s: invalid socks5 file\n",appname);
  113.                 exit(1);
  114.             }
  115.         } else {
  116.           fprintf(stderr, "\r%s: invalid or unknown option %s\n",appname, *argv);
  117.           exit(1);
  118.         }
  119.       }
  120.     }
  121.   }
  122.   printf("Big penises!");
  123.   if (accounts == NULL) {
  124.     fprintf(stderr,"\r%s: invalid accounts file\n",appname);
  125.     exit(1);
  126.   }
  127.   if (comments == NULL) {
  128.     fprintf(stderr,"\r%s: invalid comments file\n",appname);
  129.     exit(1);
  130.   }
  131.   if (s4proxys == NULL && s5proxys == NULL) {
  132.    fprintf(stderr,"\r%s: no proxy list specified\n",appname);
  133.    exit(1);
  134.   }
  135.  
  136.   accountsCount = fileLineCount(accounts);
  137.   commentsCount = fileLineCount(comments);
  138.  
  139.   if (s4proxys != NULL) s4proxysCount = fileLineCount(s4proxys);
  140.   if (s5proxys != NULL) s5proxysCount = fileLineCount(s5proxys);
  141.  
  142.   accountsStrings = (char**)malloc(sizeof(char*) * accountsCount);
  143.   fillStrings(accounts,accountsStrings,accountsCount);
  144.  
  145.   commentsStrings = (char**)malloc(sizeof(char*) * commentsCount);
  146.   fillStrings(comments,commentsStrings,commentsCount);
  147.  
  148.   if (s4proxys != NULL) {
  149.     s4proxysStrings = (char**)malloc(sizeof(char*) * s4proxysCount);
  150.     fillStrings(s4proxys,s4proxysStrings,s4proxysCount);
  151.   }
  152.   if (s5proxys != NULL) {
  153.     s5proxysStrings = (char**)malloc(sizeof(char*) * s5proxysCount);
  154.     fillStrings(s5proxys,s5proxysStrings,s5proxysCount);
  155.   }
  156.   /* print separator line */
  157.   printf("-----------------------------------------------------------\n");
  158.  
  159.   int totalProxys = s4proxysCount + s5proxysCount;
  160.  
  161.   int accountsPerProxy = fabs((float)(accountsCount / totalProxys));
  162.  
  163.   char * proxy;
  164.   bool isSocks4 = true;
  165.  
  166.   curl_global_init(CURL_GLOBAL_ALL);
  167.  
  168.   for (int i = 0; i < accountsCount; ++i) {
  169.       char * randomComment = commentsStrings[rand() % commentsCount];
  170.       char * postField = (char*)malloc(strlen(randomComment) + 8);
  171.  
  172.       wsprintf(postField,"status=%s",randomComment);
  173.  
  174.  
  175.       if (i % accountsPerProxy == 0) {
  176.         if (s4proxysCurrent < s4proxysCount) {
  177.             isSocks4 = true;
  178.             proxy = s4proxysStrings[s4proxysCurrent++];
  179.         }
  180.         else {
  181.             if (s5proxysCurrent < s5proxysCount) {
  182.                 isSocks4 = false;
  183.                 proxy = s5proxysStrings[s5proxysCurrent++];
  184.             }
  185.         }
  186.       }
  187.       CURLOPTIONS * options = (CURLOPTIONS*)malloc(sizeof(CURLOPTIONS));
  188.       options->postField = postField;
  189.       options->userPwd = accountsStrings[i];
  190.       options->proxy = proxy;
  191.       options->proxyType = (isSocks4 ? CURLPROXY_SOCKS4 : CURLPROXY_SOCKS5);
  192.       _beginthread(curl_thread,0,(void*)options);
  193.   }
  194.   while(threadEnd < accountsCount) { Sleep(10); }
  195.   printf("%s: Total Accounts: %d, Total Proxys: %d\n",appname,accountsCount,totalProxys);
  196.   printf("%s: Accounts per proxy: %d, Successful Logins: %d\n",appname,accountsPerProxy,success);
  197.   printf("-----------------------------------------------------------\n");
  198.  
  199.   return 0;
  200. }
  201. void curl_thread(void * _options) {
  202.     CURLOPTIONS * options = (CURLOPTIONS*)_options;
  203.       CURL * curl_handle = curl_easy_init();
  204.       curl_easy_setopt(curl_handle, CURLOPT_URL, URL_BASE);
  205.       curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
  206.       curl_easy_setopt(curl_handle, CURLOPT_POST, 1);
  207.       curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, options->postField);
  208.       curl_easy_setopt(curl_handle, CURLOPT_USERPWD, options->userPwd);
  209.       curl_easy_setopt(curl_handle, CURLOPT_PROXY,options->proxy);
  210.       curl_easy_setopt(curl_handle, CURLOPT_PROXYTYPE, options->proxyType);
  211.       long res = curl_easy_perform(curl_handle);
  212.       curl_easy_cleanup(curl_handle);
  213.     free(options);
  214.     if (res == 0) ++success;
  215.     threadEnd++;
  216. }
  217. void cleanStrings(char ** strings, int count) {
  218.     for (int i = 0; i < count; ++i) {
  219.         free(strings[i]);
  220.     }
  221.     free(strings);
  222. }
  223. void fillStrings(FILE * file, char ** strings, int count) {
  224.     int x = 0;
  225.     for (; x < count;) {
  226.         int j = 0;
  227.         char c = 0;
  228.         char str[256];
  229.         do {
  230.             c = fgetc(file);
  231.             if (c != '\n') {
  232.                 str[j++] = c;
  233.             }
  234.         } while (c != '\n');
  235.         if (j > 0) {
  236.             char * _str = (char*)malloc(j+1);
  237.             strncpy(_str,str,j);
  238.             _str[j] = '\0';
  239.             strings[x++] = _str;
  240.         }
  241.     }
  242.     rewind(file);
  243. }
  244. int fileLineCount(FILE * f) {
  245.     int c = 0,n = 0,j = 0;
  246.     do {
  247.         c = fgetc(f);
  248.         if (c == '\n') {
  249.             if (j > 0) ++n;
  250.             j = 0;
  251.         }
  252.         else {
  253.             ++j;
  254.         }
  255.     } while (c != EOF);
  256.     rewind(f);
  257.     return n;
  258. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement