File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / hping2 / send.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:11:37 2012 UTC (12 years, 4 months ago) by misho
Branches: hping2, MAIN
CVS tags: v2_0_0rc3p7, v2_0_0rc3p5, v2_0_0rc3p4, v2_0_0rc3p0, v2_0_0rc3, HEAD
hping2

    1: /* 
    2:  * $smu-mark$ 
    3:  * $name: sendudp.c$ 
    4:  * $author: Salvatore Sanfilippo <antirez@invece.org>$ 
    5:  * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$ 
    6:  * $license: This software is under GPL version 2 of license$ 
    7:  * $date: Fri Nov  5 11:55:49 MET 1999$ 
    8:  * $rev: 8$ 
    9:  */ 
   10: 
   11: /* $Id: send.c,v 1.1.1.1 2012/02/21 22:11:37 misho Exp $ */
   12: 
   13: #include <stdio.h>
   14: #include <string.h>
   15: #include <stdlib.h>
   16: #include <sys/time.h>
   17: #include <unistd.h>
   18: #include <signal.h>
   19: #include <errno.h>
   20: 
   21: #include "hping2.h"
   22: #include "globals.h"
   23: 
   24: static void select_next_random_source(void)
   25: {
   26: 	unsigned char ra[4];
   27: 
   28: 	ra[0] = hp_rand() & 0xFF;
   29: 	ra[1] = hp_rand() & 0xFF;
   30: 	ra[2] = hp_rand() & 0xFF;
   31: 	ra[3] = hp_rand() & 0xFF;
   32: 	memcpy(&local.sin_addr.s_addr, ra, 4);
   33: 
   34: 	if (opt_debug)
   35: 		printf("DEBUG: the source address is %u.%u.%u.%u\n",
   36: 		    ra[0], ra[1], ra[2], ra[3]);
   37: }
   38: 
   39: static void select_next_random_dest(void)
   40: {
   41: 	unsigned char ra[4];
   42: 	char a[4], b[4], c[4], d[4];
   43: 
   44: 	if (sscanf(targetname, "%4[^.].%4[^.].%4[^.].%4[^.]", a, b, c, d) != 4)
   45: 	{
   46: 		fprintf(stderr,
   47: 			"wrong --rand-dest target host, correct examples:\n"
   48: 			"  x.x.x.x, 192,168.x.x, 128.x.x.255\n"
   49: 			"you typed: %s\n", targetname);
   50: 		exit(1);
   51: 	}
   52: 	a[3] = b[3] = c[3] = d[3] = '\0';
   53: 
   54: 	ra[0] = a[0] == 'x' ? (hp_rand() & 0xFF) : strtoul(a, NULL, 0);
   55: 	ra[1] = b[0] == 'x' ? (hp_rand() & 0xFF) : strtoul(b, NULL, 0);
   56: 	ra[2] = c[0] == 'x' ? (hp_rand() & 0xFF) : strtoul(c, NULL, 0);
   57: 	ra[3] = d[0] == 'x' ? (hp_rand() & 0xFF) : strtoul(d, NULL, 0);
   58: 	memcpy(&remote.sin_addr.s_addr, ra, 4);
   59: 
   60: 	if (opt_debug) {
   61: 		printf("DEBUG: the dest address is %u.%u.%u.%u\n",
   62: 				ra[0], ra[1], ra[2], ra[3]);
   63: 	}
   64: }
   65: 
   66: /* The signal handler for SIGALRM will send the packets */
   67: void send_packet (int signal_id)
   68: {
   69: 	int errno_save = errno;
   70: 
   71: 	if (opt_rand_dest)
   72: 		select_next_random_dest();
   73: 	if (opt_rand_source)
   74: 		select_next_random_source();
   75: 
   76: 	if (opt_rawipmode)	send_rawip();
   77: 	else if (opt_icmpmode)	send_icmp();
   78: 	else if (opt_udpmode)	send_udp();
   79: 	else			send_tcp();
   80: 
   81: 	sent_pkt++;
   82: 	Signal(SIGALRM, send_packet);
   83: 
   84: 	if (count != -1 && count == sent_pkt) { /* count reached? */
   85: 		Signal(SIGALRM, print_statistics);
   86: 		alarm(COUNTREACHED_TIMEOUT);
   87: 	} else if (!opt_listenmode) {
   88: 		if (opt_waitinusec == FALSE)
   89: 			alarm(sending_wait);
   90: 		else
   91: 			setitimer(ITIMER_REAL, &usec_delay, NULL);
   92: 	}
   93: 	errno = errno_save;
   94: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>