Annotation of embedaddon/hping2/send.c, revision 1.1
1.1 ! misho 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.6 2003/08/01 14:53:08 antirez 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>