#include #include #include #include #include #include #include #include #include char inbuff[1024]; void DoAttack(int PortNo); void Attack(FILE *outfile); int main(int argc, char * argv[]){ char * studStr, *portStr; int studLen, portLen; int studNo, portNo; int i; if (argc != 2){ fprintf(stderr, "usage %s portno\n", argv[0]); exit(1); } portStr = argv[1]; if ((portLen = strlen(portStr)) < 1){ fprintf(stderr, "%s: port number must be 1 or more digits\n", argv[0]); exit(1); } for (i = 0; i < portLen; i++){ if(!isdigit(portStr[i])){ fprintf(stderr, "%s: port number must be all digits\n", argv[0]); exit(1); } } portNo = atoi(portStr); fprintf(stderr, "Port Number %d\n", portNo); DoAttack(portNo); exit(0); } void DoAttack(int portNo) { int server_sockfd; int serverlen; struct sockaddr_in server_address; FILE * outf; FILE * inf; struct hostent *h; server_sockfd = socket(AF_INET, SOCK_STREAM, 0); if((h=gethostbyname("localhost"))==NULL){ fprintf(stderr,"Host Name Error..."); exit(1); } server_address.sin_family = AF_INET; memcpy((char *) &server_address.sin_addr.s_addr, h->h_addr_list[0], h->h_length); /* server_address.sin_addr.s_addr = htonl(INADDR_ANY); */ server_address.sin_port = htons(portNo); if(connect(server_sockfd,(struct sockaddr*)&server_address,sizeof(struct sockaddr))==-1){ fprintf(stderr,"Connection out..."); exit(1); } outf = fdopen(server_sockfd, "w"); // add log message here Attack(outf); inf = fdopen(server_sockfd, "r"); if (inf == NULL){ fprintf(stderr,"could not open socket for read"); exit(1); } do { inbuff[0] = '\0'; fgets(inbuff,1024,inf); if (inbuff[0]){ fputs(inbuff,stdout); } } while (!feof(inf)); fclose(outf); fclose(inf); return; } char compromise[130] = { 'h','e','l','l','o',' ','t','h','e','r','e','\n' }; void Attack(FILE *outfile){ fprintf(outfile,compromise); fflush(outfile); }