Path: blob/master/DDOS Scripts/AMP YUBINA SCRIPTS/ssdp_scanner.c
4607 views
/* priv8 ssdp scanner. lel */12#include <pthread.h>3#include <unistd.h>4#include <stdio.h>5#include <stdlib.h>6#include <string.h>7#include <sys/socket.h>8#include <netinet/in.h>9#include <signal.h>10#include <sys/time.h>11#include <sys/types.h>12#include <math.h>13#include <ctype.h>14#include <errno.h>15#include <arpa/inet.h>16#include <netinet/ip.h>17#include <netinet/udp.h>1819volatile int running_threads = 0;20volatile int found_srvs = 0;21volatile unsigned long per_thread = 0;22volatile unsigned long start = 0;23volatile unsigned long scanned = 0;24volatile int sleep_between = 0;25volatile int bytes_sent = 0;26volatile unsigned long hosts_done = 0;27FILE *fd;28char payload[] =29"M-SEARCH * HTTP/1.1\r\nHost:239.255.255.250:1900\r\nST:ssdp:all\r\nMan:\"ssdp:discover\"\r\nMX:3\r\n\r\n";3031size = sizeof(payload);3233void *flood(void *par1)34{35running_threads++;36int thread_id = (int)par1;37unsigned long start_ip = htonl(ntohl(start)+(per_thread*thread_id));38unsigned long end = htonl(ntohl(start)+(per_thread*(thread_id+1)));39unsigned long w;40int y;41unsigned char buf[65536];42memset(buf, 0x01, 90);43int sizeofpayload = 90;44int sock;45if((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))<0) {46perror("cant open socket");47exit(-1);48}49for(w=ntohl(start_ip);w<htonl(end);w++)50{51struct sockaddr_in servaddr;52bzero(&servaddr, sizeof(servaddr));53servaddr.sin_family = AF_INET;54servaddr.sin_addr.s_addr=htonl(w);55servaddr.sin_port=htons(1900);56sendto(sock,payload,size,0, (struct sockaddr *)&servaddr,sizeof(servaddr));57bytes_sent+=size;58scanned++;59hosts_done++;60}61close(sock);62running_threads--;63return;64}6566void sighandler(int sig)67{68fclose(fd);69printf("\n");70exit(0);71}7273void *recievethread()74{75printf("\n");76int saddr_size, data_size, sock_raw;77struct sockaddr_in saddr;78struct in_addr in;7980unsigned char *buffer = (unsigned char *)malloc(65536);81sock_raw = socket(AF_INET , SOCK_RAW , IPPROTO_UDP);82if(sock_raw < 0)83{84printf("Socket Error\n");85exit(1);86}87while(1)88{89saddr_size = sizeof saddr;90data_size = recvfrom(sock_raw , buffer , 65536 , 0 , (struct sockaddr *)&saddr , &saddr_size);91if(data_size <0 )92{93printf("Recvfrom error , failed to get packets\n");94exit(1);95}96struct iphdr *iph = (struct iphdr*)buffer;97if(iph->protocol == 17)98{99unsigned short iphdrlen = iph->ihl*4;100struct udphdr *udph = (struct udphdr*)(buffer + iphdrlen);101unsigned char* payload = buffer + iphdrlen + 90;102if(ntohs(udph->source) == 1900)103{104int body_length = data_size - iphdrlen - 90;105106if (body_length > 40)107108{109found_srvs++;110111fprintf(fd,"%s %d\n",inet_ntoa(saddr.sin_addr),body_length);112fflush(fd);113114}115116}117}118119}120close(sock_raw);121122}123124int main(int argc, char *argv[ ])125{126127if(argc < 6){128fprintf(stderr, "Invalid parameters!\n");129fprintf(stdout, "Usage: %s <ip range start (1.0.0.0)> <ip range end (255.255.255.255)> <outfile> <threads> <scan delay in ms>\n", argv[0]);130exit(-1);131}132fd = fopen(argv[3], "a");133sleep_between = atoi(argv[5]);134135signal(SIGINT, &sighandler);136137int threads = atoi(argv[4]);138pthread_t thread;139140pthread_t listenthread;141pthread_create( &listenthread, NULL, &recievethread, NULL);142143char *str_start = malloc(18);144memset(str_start, 0, 18);145str_start = argv[1];146char *str_end = malloc(18);147memset(str_end, 0, 18);148str_end = argv[2];149start = inet_addr(str_start);150per_thread = (ntohl(inet_addr(str_end)) - ntohl(inet_addr(str_start))) / threads;151unsigned long toscan = (ntohl(inet_addr(str_end)) - ntohl(inet_addr(str_start)));152int i;153for(i = 0;i<threads;i++){154pthread_create( &thread, NULL, &flood, (void *) i);155}156sleep(1);157printf("Scan in Progress \n");158char *temp = (char *)malloc(17);159memset(temp, 0, 17);160sprintf(temp, "SSDP Found");161printf("%-16s", temp);162memset(temp, 0, 17);163sprintf(temp, "IP/s");164printf("%-16s", temp);165memset(temp, 0, 17);166sprintf(temp, "Bytes/s");167printf("%-16s", temp);168memset(temp, 0, 17);169sprintf(temp, "Threads");170printf("%-16s", temp);171memset(temp, 0, 17);172sprintf(temp, "Percent Done");173printf("%s", temp);174printf("\n");175176char *new;177new = (char *)malloc(16*6);178while (running_threads > 0)179{180printf("\r");181memset(new, '\0', 16*6);182sprintf(new, "%s|%-15lu", new, found_srvs);183sprintf(new, "%s|%-15d", new, scanned);184sprintf(new, "%s|%-15d", new, bytes_sent);185sprintf(new, "%s|%-15d", new, running_threads);186memset(temp, 0, 17);187int percent_done=((double)(hosts_done)/(double)(toscan))*100;188sprintf(temp, "%d%%", percent_done);189sprintf(new, "%s|%s", new, temp);190printf("%s", new);191fflush(stdout);192bytes_sent=0;193scanned = 0;194sleep(1);195}196printf("\n");197fclose(fd);198return 0;199}200201